“等待HTTPClient.GetAsync”永不完成
问题描述:
我有这个代码工作在.Net核心。我们意识到核心是不是我们最合适的,现在,我已经在.net 4.5.2被重构,当我打电话“等待HTTPClient.GetAsync”永不完成
HttpResponseMessage response = await client.GetAsync(passedlURI);
它只是无限期地继续思考。我已将它指向本地API的主机版本,并确认API正在读取标题并正确返回数据,我使用Postman来确认实时API和本地主机API都向我发送了正确的数据。这是我到目前为止的代码:
答
确保使用.ConfigureAwait(false)
与每个await
的。在内部等待当前同步上下文的任务上同步等待是ASP.NET中死锁的众所周知的原因。
例如,而不是:
await GetAPIAsync();
务必:
await GetAPIAsync().ConfigureAwait(false);
当然,它甚至会更好,如果你不同步等待到开始的任务。
该问题不会发生在ASP.NET Core上,因为它不使用自定义同步上下文。
我不知道这个代码是否编译...无论如何!?此外,这个架构对我来说没有意义。 – DotNetDev
你可以把'公共字符串CallAPI'变成'公共异步任务 CallAPI'吗? –
mason
@DotNetDev你不需要'async Task'方法中的return语句。只有'异步任务'。 –
mason