2017-04-11 251 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上,因为它不使用自定义同步上下文。