1. ホーム
  2. c#

[解決済み] awaitとContinueWithの違い

2022-05-09 07:53:54

質問

誰か説明してください。 awaitContinueWith は、次の例では同義語なのかそうでないのか。初めてTPLを使おうとしていて、ドキュメントを全部読んでいるのですが、違いがよくわかりません。

待つ :

String webText = await getWebPage(uri);
await parseData(webText);

ContinueWith :

Task<String> webText = new Task<String>(() => getWebPage(uri));
Task continue = webText.ContinueWith((task) =>  parseData(task.Result));
webText.Start();
continue.Wait();

特定の状況において、どちらかが優先されるのでしょうか?

どのように解決するのですか?

2つ目のコードで、あなたは 同期的に は継続が完了するのを待ちます。最初のバージョンでは、このメソッドは最初の await 式がまだ完成していない場合。

どちらも継続をスケジュールするという点ではよく似ていますが、制御フローが少しでも複雑になるとすぐに await につながる。 大いに よりシンプルなコードになります。さらに、Servyがコメントで指摘したように、タスクを待つことで例外の集約が"unwrap"され、通常よりシンプルなエラー処理につながります。また await は、呼び出し側のコンテキストで暗黙のうちに継続をスケジュールします( ConfigureAwait ). 手動でできないことはないのですが、この作業を行うには await .

の両方を用いて、もう少し大きな一連の操作を実装してみることをお勧めします。 awaitTask.ContinueWith - 目から鱗が落ちる思いです。