2014-02-24 45 views
3

我有下面的代碼,我使用調用一個URI:如何阻止HttpClient.GetAsync(uri)掛起?

var uri = string.Format("Helpers/ProfileList/Online/?locationId=0&skip=0&take={0}", numProfiles); 
HttpResponseMessage response = await client.GetAsync(uri); 
response.EnsureSuccessStatusCode(); 

URI是在自定義的Web API的URI(我可以調試,並按照通過)指出。但是,當調用api中的最後一個return語句時,似乎沒有任何事情發生。它應該去response.EnsureSuccessStatusCode();線,但它不是。它似乎只是掛着。

回答

9

我的spidey-sense告訴我,你的代碼在返回的任務上阻塞了,例如:Task.WaitTask<T>.Result。默認情況下,我將在我的博客上解釋這個cause a deadlock

要修復它,請將Task.WaitTask<T>.Result替換爲await

+0

我只是想建議嘗試'等待client.GetAsync(uri).ConfigureAwait(false)',這可能會消除這樣的死鎖:) – Noseratio

+0

是的,我發現只是在寫完問題後才解決(在「相關「右側的列) –

+1

'ConfigureAwait'比IMO解決方案更適合解決方案。你最終會得到更脆弱的代碼。更合適的解決方案是使用'await'而不是'Wait'或'Result'。 –