簡體   English   中英

Task.GetAwaiter()。GetResult()在Windows服務中導致死鎖

[英]Task.GetAwaiter().GetResult() causing a deadlock in a Windows Service

我有一個大量使用Async / Await的應用程序。 我遇到了無法解釋的問題。

我正在調用.GetAwaiter().GetResult()並且遇到了死鎖。 我不明白為什么要考慮到我在不應該具有SynchronizationContext的Windows Service中。 此外,我在掛起時從進程中獲取一個轉儲文件,在Visual Studio中將其打開,並且System.Threading.SynchronizationContext.Current的值為null

為什么會阻塞? 我顯然缺少了一些東西。

在異步/等待的上下文中,應避免使用GetResult(),訪問Task的Result成員或調用Task的Wait()方法。 這樣做不僅會阻塞任務,而且會阻塞線程,導致該線程上的所有任務都被阻塞,並通常導致死鎖。

相反,您應該等待任務。 使用await不會阻塞線程,因此它可以完成其他任務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM