Task.Run を使用して非同期メソッドを同期的に呼び出す
非同期プログラミングを使用すると、メインスレッドをブロックすることなく、長時間実行される操作を実行できます。ただし、場合によっては、非同期メソッドを同期的に呼び出す必要がある場合があります。 Task.Run を使用してこれを実現する方法は次のとおりです:
シーン:
次の非同期メソッドを考えてみましょう:
<code class="language-c#">public async Task<string> GenerateCodeAsync() { string code = await GenerateCodeService.GenerateCodeAsync(); return code; }</code>
このメソッドを別の同期メソッドから同期的に呼び出す必要があるとします。
解決策:
非同期メソッドを同期的に実行するには、Task.Run メソッドを使用してスレッド プール スレッドで実行できます。
<code class="language-c#">string code = Task.Run(() => GenerateCodeAsync()).GetAwaiter().GetResult();</code>
このコードでは次の手順を使用します:
.Result を直接使用する場合の欠点:
タスクの Result プロパティに直接アクセスする単純な方法 (つまり string code = GenerateCodeAsync().Result;
) は、次のような欠点があるため避けてください。
.GetAwaiter().GetResult()
以上がTask.Run を使用して非同期メソッドを同期的に呼び出すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。