2017-04-11 148 views
-1

我有這個代碼工作在.Net核心。我們意識到核心是不是我們最合適的,現在,我已經在.net 4.5.2被重構,當我打電話「等待HTTPClient.GetAsync」永不完成

HttpResponseMessage response = await client.GetAsync(passedlURI);

它只是無限期地繼續思考。我已將它指向本地API的主機版本,並確認API正在讀取標題並正確返回數據,我使用Postman來確認實時API和本地主機API都向我發送了正確的數據。這是我到目前爲止的代碼:

enter image description here

+0

我不知道這個代碼是否編譯...無論如何!?此外,這個架構對我來說沒有意義。 – DotNetDev

+0

你可以把'公共字符串CallAPI'變成'公共異步任務 CallAPI'嗎? – mason

+1

@DotNetDev你不需要'async Task'方法中的return語句。只有'異步任務'。 – mason

回答

2

確保使用.ConfigureAwait(false)與每個await的。在內部等待當前同步上下文的任務上同步等待是ASP.NET中死鎖的衆所周知的原因。

例如,而不是:

await GetAPIAsync(); 

務必:

await GetAPIAsync().ConfigureAwait(false); 

當然,它甚至會更好,如果你不同步等待到開始的任務。

該問題不會發生在ASP.NET Core上,因爲它不使用自定義同步上下文。