我有一个使用Async / Await的应用程序。我遇到了一个我无法解释的问题。
我正在呼叫.GetAwaiter().GetResult()
,并且遇到了死锁。考虑到我位于Windows服务中,该服务不应该包含SynchronizationContext
,因此我不明白为什么。此外,我在挂起时从进程中获取了一个转储文件,在Visual Studio中将其打开,并且System.Threading.SynchronizationContext.Current
的值为null
。
为什么会阻止?我显然缺少了一些东西。
答案 0 :(得分:1)
在异步/等待状态下,应避免使用GetResult(),访问Task的Result成员或调用Task的Wait()方法。这样做不仅会阻塞任务,而且会阻塞线程,导致该线程上的所有任务都被阻塞,并通常导致死锁。
相反,您应该等待任务。使用await不会阻塞线程,因此它可以完成其他任务。