[英]Task.Run freezing
誰能教我為什么在完成lambda之后以下內容會凍結:
return await Task.Run(() =>
{
return SuperLongMethod();
})
...但是,以下工作可以按預期進行:
return Task.Run(() =>
{
return SuperLongMethod();
}).GetAwaiter().GetResult();
似乎第一個版本中的Task.Run無法識別lambda已完成。 我的代碼中還有其他示例,其中我使用第一個版本沒有問題,因此我很茫然地了解它們之間的區別。
為了清楚起見,SuperLongMethod()進行了Web服務調用,並對結果數據進行了大量的后處理
我猜想在您的調用堆棧的最Task.Wait
您正在調用Task.Wait
或Task<T>.Result
,從而導致我在博客上描述的死鎖問題 。 您應該改用await
。
附帶說明一下, SuperLongMethod
應該可以分解為CallWebServiceAsync
和DoPostProcessing
,而只有DoPostProcessing
應該包裝在Task.Run
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.