sha*_*y__ -1 .net c# asp.net task async-await
有人可以解释为什么AsyncMethod2会导致死锁吗?我(认为我)理解顶级 Task inAsyncMethod1不会尝试在由 捕获的上下文中执行它的延续BlockingMethod,因此避免了死锁,但我不明白在 引擎盖下发生了什么AsyncMethod2:
private static void BlockingMethod(IEnumerable<Object> data)
{
AsyncMethod1(data).Wait(); // no deadlock
AsyncMethod2(data).Wait(); // deadlock
}
private static async Task AsyncMethod1(IEnumerable<Object> data)
{
await Task.Run(async () =>
{
foreach (var obj in data)
{
await AsyncMethod2.(obj);
}
}).ConfigureAwait(false);
}
private static async Task AsyncMethod2(IEnumerable<Object> data)
{
await Task.Run(async () =>
{
foreach (var obj in data)
{
await AsyncMethod2.(obj).ConfigureAwait(false);
}
});
}
Run Code Online (Sandbox Code Playgroud)
将await在AsyncMethod2正在回归它的上下文。我指的await是实际存在的AsyncMethod2- 即await Task.Run(...);. 没有ConfigureAwait(false)那个await,所以它会恢复到它的上下文。
ConfigureAwait(false)循环中是否有 a无关紧要,因为该循环在线程池线程 ( Task.Run) 上运行,无论如何都没有上下文。
| 归档时间: |
|
| 查看次数: |
673 次 |
| 最近记录: |