[英]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.