14
2つ(またはそれ以上)の非同期および従属(最初は2番目の実行を完了するために必要な)操作で構成される非同期コードを作成するには、あなたはおそらくできればawait
を使用したいと思います順番待ちVS継続要求待ち
await RunFirstOperationAsync()
.ContinueWith(t => RunSecondOperationAsync());
2つ(またはそれ以上)の非同期および従属(最初は2番目の実行を完了するために必要な)操作で構成される非同期コードを作成するには、あなたはおそらくできればawait
を使用したいと思います順番待ちVS継続要求待ち
await RunFirstOperationAsync()
.ContinueWith(t => RunSecondOperationAsync());
:継続と
await RunFirstOperationAsync();
await RunSecondOperationAsync();
例:非同期/待つと
例。
ContinueWith
には多くの問題があります。私はwhy ContinueWith
is dangerousのブログ記事でこれを簡単に説明しています。これは以前のブログ記事why StartNew
is dangerous(同じ問題の多くを共有しています)に基づいています。特に
:
ContinueWith
が良いデフォルトTaskScheduler
を持っていません。既定のタスクスケジューラはTaskScheduler.Current
(TaskScheduler.Default
ではない)です。現在のSynchronizationContext
での再開は、必要に応じて手動で行う必要があります。ContinueWith
には、理想的でないデフォルトのoptionsがあります。非同期コードの場合は、少なくともDenyChildAttach
とExecuteSynchronously
が必要です。ContinueWith
は、この制限を回避するために一般に追加のUnwrap
コールが必要な非同期継続を認識しません。ContinueWith
は、その驚くべき方法でそのCancellationToken
引数を扱います。その詳細in this blog post私の。これらの引数は、すべて私のblog post on Task continuationsに要約されています。 await
には、これらの欠点はありません。
[this](http://stackoverflow.com/questions/8767218/is-async-await-keyword-equivalent-to-a-continuewith-lambda)を参照してください。 –