【发布时间】:2016-01-29 12:38:23
【问题描述】:
我有一个这样的httpclient:
var client = new HttpClient();
我是这样发帖的:
var result = client.PostAsync(
endpointUri,
requestContent);
得到这样的响应:
HttpResponseMessage response = result.Result;
我知道这个调用会阻塞线程,这就是它应该如何工作(只是为我自己构建一个工具,不需要异步线程)
我第一次运行此调用时,大约需要 2 分钟才能获得结果。同时,如果我在其他地方进行完全相同的调用,它会在 200 毫秒内完成。即使我点击谷歌,也需要 2 分钟。但是,在第一次通话之后,只要我保持应用程序打开,任何额外的通话都是好的。当我打开应用程序时,它只是第一次调用。这可能是什么原因造成的?
【问题讨论】:
-
我会首先使用
.ContinueWith而不是.Result(使用async/await...)——除此之外,我看不出任何可能导致延迟的东西,老实说,我怀疑问题出在其他地方 -
如果我们有一个堆栈来查看这将很容易。使用 new WebClient().DownloadString() 进行测试,在暂停期间暂停调试器并发布包括外部代码的调用堆栈。它可能说明了有关 DNS 或代理的内容。
-
我无法开始猜测,但我会首先排除同步执行此问题的可能性。 HttpClient 被设计为仅是异步的,并且对于以阻塞方式使用它有强烈的警告。
await result和result.Result一样简单,为什么要拒绝正确使用呢?
标签: c# winforms dotnet-httpclient