Task.GetAwaiter()。GetResult()在Windows服务中导致死锁

时间:2019-04-03 03:26:00

标签: c# .net async-await

我有一个使用Async / Await的应用程序。我遇到了一个我无法解释的问题。

我正在呼叫.GetAwaiter().GetResult(),并且遇到了死锁。考虑到我位于Windows服务中,该服务不应该包含SynchronizationContext,因此我不明白为什么。此外,我在挂起时从进程中获取了一个转储文件,在Visual Studio中将其打开,并且System.Threading.SynchronizationContext.Current的值为null

为什么会阻止?我显然缺少了一些东西。

1 个答案:

答案 0 :(得分:1)

在异步/等待状态下,应避免使用GetResult(),访问Task的Result成员或调用Task的Wait()方法。这样做不仅会阻塞任务,而且会阻塞线程,导致该线程上的所有任务都被阻塞,并通常导致死锁。

相反,您应该等待任务。使用await不会阻塞线程,因此它可以完成其他任务。