私は理解していないと思います。私はそれを考えていました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
あなたが実際にはない場合は無意味ですawait
のTask
。 - Servy