【发布时间】:2016-01-18 00:08:08
【问题描述】:
有人可以解释为什么AsyncMethod2 会导致死锁吗?我(想我)明白AsyncMethod1 中的顶级任务不会尝试在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);
}
});
}
【问题讨论】:
标签: c# asp.net .net async-await task