【问题标题】:"await HTTPClient.GetAsync" never completing [duplicate]“等待HTTPClient.GetAsync”永远不会完成[重复]
【发布时间】:2017-04-11 18:33:40
【问题描述】:

我有这段代码在 .Net Core 中工作。我们意识到 Core 现在不是最适合我们的,所以我一直在 .Net 4.5.2 中进行重构,当我调用时

HttpResponseMessage response = await client.GetAsync(passedlURI);

它只是无限期地继续思考。我已将其指向我的 API 的本地主机版本,并确认 API 正在读取标头并正确返回我的数据,我已使用 Postman 确认实时 API 和 localhost API 都向我发送了正确的数据。到目前为止,这是我的代码:

【问题讨论】:

  • 我想知道这段代码是否编译...无论如何!?此外,这种架构对我来说没有意义。
  • 你能把public string CallAPI变成public async Task<string> CallAPI吗?
  • @DotNetDev 在async Task 方法中不需要返回语句。仅限async Task<T>
  • 对,无效,谢谢
  • 这里为什么用了三种方法?看起来它们都可以合二为一。而且您不需要任何字段,只需使用局部变量即可。

标签: asp.net async-await .net-4.5.2


【解决方案1】:

确保将.ConfigureAwait(false) 与您的每个await 一起使用。在内部等待当前同步上下文的任务上同步等待是众所周知的 ASP.NET 死锁原因。

例如,而不是:

await GetAPIAsync();

做:

await GetAPIAsync().ConfigureAwait(false);

当然,如果您不同步等待开始的任务会更好。

在 ASP.NET Core 上不会出现此问题,因为它不使用自定义同步上下文。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 2012-10-19
    • 1970-01-01
    • 2019-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多