我的代碼卡在GetAsync().Result. GetAsync()方法如下:
我正在異步呼叫 API 端點,如下所示:
public async Task<List<Account>> GetAsync(string feature, string licenseType, string token)
{
// Find accounts that have a license for the user
var accounts = await _licenseMgr.GetAccountsAsync(
feature,
licenseType,
token);
return accounts;
}
在等待的方法運行后,代碼就會卡住。使用 Fiddler 檢查時,回應標頭似乎是HTTP/1.1 404 Not Found.
為什么代碼會卡在那里而不是至少回傳 null 或其他東西?
uj5u.com熱心網友回復:
最有可能的問題是GetAsync希望在執行緒完成后繼續執行GetAccountsAsync,該執行緒被Result呼叫阻塞。同時被阻塞的執行緒想要獲得GetAsync解鎖的結果。因此,我們這里有經典的僵局。
這里正確的解決方案是避免Result/GetReult/Wait()在異步代碼中使用和其他阻塞的東西。解決掛起的最佳方法是替換GetAsync().Result為await GetAsync().
如果這樣的替換很難實作,您可以嘗試強制將任務放在執行緒池中(從而洗掉當前的同步背景關系)
var result = Task.Run(async () => await GetAsync()).Result;
(這取決于您的環境將或不會作業)
另一種方式是到處完全切換到同步API。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/490586.html
上一篇:DistinctBy的方法將從重復的id中洗掉重復項,但如果值為null會留下重復項嗎?
下一篇:從字串構建Linq排序運算式會導致““system.int32”的運算式不能用于回傳型別“System.Object””
