簡體   English   中英

Task.Run凍結

[英]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.WaitTask<T>.Result ,從而導致我在博客上描述的死鎖問題 您應該改用await

附帶說明一下, SuperLongMethod應該可以分解為CallWebServiceAsyncDoPostProcessing ,而只有DoPostProcessing應該包裝在Task.Run

暫無
暫無

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

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