Async/Await を理解する: Task.Run を使用する場合
非同期プログラミングの領域では、非同期メソッド ( async)と非同期実行(バックグラウンド スレッド)。ニュアンスを詳しく調べるために、次のシナリオを検討してみましょう。
シナリオ 1: バックグラウンド スレッドなし
private async Task DoWork1Async() { int result = 1 + 2; }
この例では、メソッドは非同期としてマークされていますが、バックグラウンドでの実行を必要としない簡単な操作を実行します。したがって、待機している DoWork1Async() は同期的に実行されます。
シナリオ 2: バックグラウンド スレッドで実行
private async Task DoWork2Async() { Task.Run( () => { int result = 1 + 2; }); }
ここでも、メソッドは非同期としてマークされていますが、実際の操作を Task.Run にラップします。これにより、操作がバックグラウンド スレッドで確実に実行されます。ただし、バックグラウンド スレッド操作が待機されていないため、待機中の DoWork2Async() は同期的に実行されます。
メソッドの戻り値の型と非同期動作
メソッドの戻り値の型メソッドはその非同期動作にも影響を与える可能性があります。 タスクまたはタスクを返すメソッド
非同期実行の Task.Run
メソッドを待機可能にし、その操作をバックグラウンド スレッドで実行するには、を使用する必要がありますTask.Run を使用して新しいタスクを作成します。 このアプローチは、同期コードと非同期コードを明確に分離できるため、メソッド全体を Task.Run でラップするよりも適切です。
private Task<int> DoWorkAsync() // No async because the method does not need await { return Task.Run(() => { return 1 + 2; }); }
ベスト プラクティス
以上がAsync/Await で「Task.Run」を使用する必要があるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。