ContinueWhenAll を適切に使用していることを確認したいと思います。非同期で実行される呼び出しが多数あり、他のタスクが正常に完了した後にのみ最終タスクを完了したい。結果に対していくつかの計算を行って、代わりに処理を停止して禁止された HTTP を返す必要があるかどうかを確認します。結果。私が確信していないのは、最後の行が実際に他のすべてのタスクが完了するのを待つのか、それとも別の構造にする必要があるのか ということです. もしそうなら、 if(getPlatformTask.Result... の評価を通過した場合にのみ呼び出されるように、最後の行をどのように構成する必要がありますか?
// run some tasks and then gather them here
Task.Factory.ContinueWhenAll(new Task[]{ getPlatformTask, getUserTask },
(tasks) =>
{
Task.WaitAll(tasks);
if (getPlatformTask.Result == null || getUserTask.Result == null)
{
return Task<HttpResponseMessage>.Factory.StartNew(() =>
{
return new HttpResponseMessage(HttpStatusCode.Forbidden);
});
}
});
// will this line below get called before the inner task above completes?
return base.SendAsync(request, cancellationToken);