我有一个非常简单的方法,基本上从传入的 url 列表中检索字符串内容:
foreach (var url in urls)
{
var content = _httpClient.GetStringAsync(url).Result;
}
间歇性地,我得到以下异常:
An operation was attempted on something that is not a socket
我怀疑我的连接用完了? 如果有一些网络延迟(每个 url 需要一秒钟左右的时间才能返回),我不会收到此错误。
有什么办法可以避免这种情况吗?
最佳答案
使用 .Result 可能会导致问题,具体取决于当前的线程同步上下文是什么。但是,假设 .Result 没有导致问题,则有一个属性限制允许的同时连接数。但是,除非您明确设置它,否则有时它实际上什么都不做,您可以轻松地让 HttpClient 尝试发出 100 多个并发请求。
所以,尝试添加这一行,
ServicePointManager.DefaultConnectionLimit = ServicePointManager.DefaultConnectionLimit;
我知道它看起来很蠢,但它实际上会将同时连接的数量限制为 2。这可能会阻止您看到的任何奇怪问题。
关于c# - 尝试在非 HttpClient 套接字上进行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20094689/