如何阻止HttpClient.GetAsync(uri)挂起?

Pie*_*arg 5 c# async-await asp.net-web-api

我有以下代码用于调用uri:

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

uri指向一个自定义的web api uri(我可以调试并完成).但是,当调用api中的最后一个return语句时,似乎什么也没发生.它应该去response.EnsureSuccessStatusCode();线,但事实并非如此.它似乎挂了.

Ste*_*ary 11

我的spidey-sense告诉我,你的调用堆栈会进一步阻止你的代码在返回的任务上阻塞,例如,Task.WaitTask<T>.Result.默认情况下,这会导致我在博客上解释的死锁.

要修复它,请更换Task.WaitTask<T>.Result使用await.

  • "ConfigureAwait"更像是一种解决方法,而不是解决方案,IMO; 你最终会得到更脆弱的代码.更合适的解决方案是使用`await`而不是`Wait`或`Result`. (2认同)