非同期プログラミングには await
と Task.Run
が含まれることが多く、混乱が生じる可能性があります。 この記事では、具体的な例を通じてそれらの違いを明確にします。
これらのコード スニペットを分析してみましょう:
<code class="language-csharp">await Task.Run(() => LongProcess());</code>
<code class="language-csharp">await LongProcess();</code>
LongProcess
は、await ExecuteReaderAsync()
を使用して複数のデータベース呼び出しを実行する非同期メソッドです。
async
/await
は本質的に複数のスレッドを作成しないことを明確にすることが重要です。 単一のスレッドがすべてを処理します。
Async
/await
を使用すると、スレッドは非同期操作を待機している間に他のタスクを実行できます。 シェフが野菜を切ったりオーブンをチェックしたりしながらマルチタスクをこなしているところを想像してみてください。スレッドは同様に、await
に遭遇するまでタスク間を切り替え、その後実行を再開します。
Task.Run
は、完了をすぐに待たずに非同期操作を開始する場合に役立ちます。これは、非同期操作の実行中にユーザー入力またはその他のタスクに対するスレッドの応答性を維持する場合に有利です。
この例では、どちらのアプローチでも同じ結果が得られます。 await Task.Run(...)
は、Task.Run
によって管理される別のスレッドで非同期操作を実行します。ただし、現在のスレッドはまだ完了を待機しているため、機能的には LongProcess
.
async
/await
のニュアンスをマスターすることは、効率的な非同期プログラミングにとって重要です。 この特定のケースでは、await Task.Run(...)
と await
の両方が同じ結果を達成します。 最適な選択は、非同期操作中に現在のスレッドの応答性を維持する必要があるかどうかによって異なります。
以上がAwait Task.Run(() => ...) と Await LongProcess(): それぞれをいつ使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。