【问题标题】:How to stop HttpClient.GetAsync(uri) from hanging? [duplicate]如何阻止 HttpClient.GetAsync(uri) 挂起? [复制]
【发布时间】:2014-03-26 02:57:52
【问题描述】:

我有以下用于调用 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(); 行,但不是。它似乎挂了。

【问题讨论】:

    标签: c# asp.net-web-api async-await


    【解决方案1】:

    我的 spidey-sense 告诉我,在调用堆栈的更深处,您的代码阻塞了返回的任务,例如,Task.WaitTask<T>.Result。默认情况下,这将是 cause a deadlock 我在我的博客上解释的。

    要修复它,请将 Task.WaitTask<T>.Result 替换为 await

    【讨论】:

    • 我只是建议尝试await client.GetAsync(uri).ConfigureAwait(false),这可能会消除这样的死锁:)
    • 是的,我在写完问题后发现了这个问题(在右侧的“相关”列中)
    • ConfigureAwait 更像是一种变通方法而不是解决方案,IMO;你最终会得到更脆弱的代码。更合适的解决方案是使用await 而不是WaitResult
    猜你喜欢
    • 2010-11-16
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多