Ansyc/Awaitの「BackgroundWorker」はdesigned to be replacedです。残りのメソッドを非同期にするのを待っていますか?
Async/Awaitが凝縮しているように、私はBackgroundWorkersの一部をAsync/Await呼び出しに変換し始めています。
これは(UIから呼び出された)私が持っているコードの例です:私はRunFromTheUI
を呼び出すとき
public async void RunFromTheUI()
{
await OtherAction();
}
public async void OtherAction()
{
var results = await services.SomeRemoteAction();
foreach (var result in results)
{
result.SemiIntenseCalculation();
Several();
Other();
NonAsync();
Calls();
}
SomeFileIO();
}
それは(非同期と待つ設計どおりに)ほとんどすぐに戻ります。
しかし、services.SomeRemoteAction()
が終了した後で再開すると、foreach
ループが実行され、もう1つのメソッド呼び出しが実行されます。
私の質問は次のとおりです:そのループがパフォーマンスの豚であれば、UIはフリーズしますか?(バックグラウンドワーカースレッドの前にすべてがあったので、UIが遅くならなかった)。
注:私は.Net 4.0をターゲットにしており、Async Nuget Packageを使用しています。
async/awaitとBackgroundWorkerは、2つの異なる問題を解決します。 BG作業者は、タスクによってより正確に置き換えられます。 Asyncはワーカーのボディコードが基本的にアイドル状態のときにのみこれらを置き換えますが、BGW/Tasksは重労働が必要なときにはまだ便利です。私はあなたの質問でサービス結果を待っているようです、ちょうどFYI。 –
1.コードはコンパイルされません。あなたは '非同期void'メソッドを'待つ 'ことはできません。 2. '非同期void'メソッドの使用を避け、' await'することができず例外処理を難しくします。 – svick