【发布时间】:2015-03-15 06:42:24
【问题描述】:
我想我不明白什么。我曾认为Task.Yield() 强制为一项任务启动一个新线程/上下文,但在re-reading this answer 上,它似乎只是强制方法异步。它仍将处于相同的上下文中。
在 asp.net 进程中,在不导致死锁的情况下并行创建和运行多个任务的正确方法是什么?
也就是说,假设我有以下方法:
async Task createFileFromLongRunningComputation(int input) {
//many levels of async code
}
而当某个POST路由命中时,我想同时启动上述方法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 是正确的,但显然不是。
【问题讨论】:
-
如果您从未真正使用过
awaitTask,那么调用ConfigureAwait是毫无意义的。 -
谢谢@Servy 我有点知道,但我没想到
标签: c# asp.net multithreading task-parallel-library async-await