4

私は理解していないと思います。私はそれを考えていましたTask.Yield()タスクに対して新しいスレッド/コンテキストを開始するよう強制したこの答えをもう一度読むメソッドを非同期にするだけのようです。それはまだ同じ文脈にあります。

asp.netプロセスで、デッドロックを発生させることなく複数のタスクを並行して作成および実行する正しい方法は何ですか?

つまり、次のような方法があるとします。

async Task createFileFromLongRunningComputation(int input) { 
    //many levels of async code
}

そして、あるPOSTルートがヒットしたら、同時に上記のメソッドを3回起動したいです。すぐに戻るしかし、3つすべてが終わったらログに記録します。

私は私の行動にこのようなものを入れる必要があると思います

public IHttpAction Post() {
   Task.WhenAll(
       createFileFromLongRunningComputation(1),
       createFileFromLongRunningComputation(2),
       createFileFromLongRunningComputation(3)
   ).ContinueWith((Task t) =>
      logger.Log("Computation completed")
   ).ConfigureAwait(false);
   return Ok();

}

に入る必要があるものcreateFileFromLongRunningComputation?私は思っていたTask.Yield正しいのですが、どうやらそうではありません。


  • 呼び出しConfigureAwaitあなたが実際にはない場合は無意味ですawaitTask。 - Servy
  • ありがとう@Servy私は一種のことを知っていましたが、それは私の心を滑らせました - George Mauer

リンクされた質問


関連する質問

最近の質問