繁体   English   中英

HttpClient PostAsync 被阻塞

[英]HttpClient PostAsync is blocking

我正在尝试从我的 UI 线程调用HttpClient.PostAsync() 我已经在我的开发机器上测试过这个,它工作正常,但在我的目标机器上似乎阻塞了 UI 线程。 我在两台机器上都运行了这个测试

int tick = Environment.TickCount;
Task<HttpResponseMessage> postTask = _httpClient.PostAsync(Uri,
    new StringContent(messageString));
MessageBox.Show(String.Format("Time {0}", Environment.TickCount - tick));
response = await postTask;

在我的开发机器上,消息框显示 ~<100ms 但是在目标机器上超过 2.5 秒。 是否有我遗漏的东西,或者是否需要一些设置/操作系统/硬件支持。

这可能是一个DNS查找,并在评论中指出的问题会为未来的呼叫可能的缓存,如果你绝对需要这并不阻止用户界面。

唯一的解决方案是卸载它(以线程池线程为代价)。

var postTask = await Task.Run(() => _httpClient.PostAsync(Uri, new StringContent(messageString)));

为了将来参考,我想我找到了解决方案。 看起来在ServicePointManager.FindServicePoint()花费了时间,它被称为创建WebRequest 我注意到用适当的网关配置我的目标机器解决了速度问题,但是在我的情况下,机器不会总是连接到更大的 LAN 或互联网,所以我想知道如果你将HttpClientHandler.UseProxies设置为false它会跳过试图找到一个代理服务器,它现在在 ~32 毫秒内返回。

奇怪的是他们没有FindServicePoint() async但这似乎是问题所在。 我认为我的 Uri 是一个固定的 ip,即http://192.168.250.1:80/...我会绕过所有这些东西,但事实并非如此

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM