async await task.Result 卡死


 

在如下代碼中:

public async Task<string> GetData()

{

  return await DoWork();

}

 

在UI線程中調用

var data = GetData().Result;

此時線程會卡死;

兩種解決辦法:

1,所有調用方法鏈中使用async、await方式調用。

var data = await GetData().

2, 去掉調用鏈中的async,await,直接返回Task類型。

public Task<string> GetData()

{

  return DoWork();

}

 

原因 Task.Result會直接阻塞當前調用線程,而aysnc、await機制是使用狀態機切換上下文,

當調用.Result時,當前線程阻塞,async、await狀態機無法切換回線程上下文,導致死鎖。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM