在如下代碼中:
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狀態機無法切換回線程上下文,導致死鎖。