我有一个非常简单的方法,它基本上从传入的URL列表中检索字符串内容:
foreach (var url in urls)
{
var content = _httpClient.GetStringAsync(url).Result;
}
间歇性地,我得到以下异常:
尝试对非套接字
的操作进行操作
我怀疑我的连接已经用完了? 如果存在一些网络延迟(并且每个url返回需要一秒左右),我不会收到此错误。
有没有办法阻止这种情况?
答案 0 :(得分:0)
使用.Result可能会导致问题,具体取决于当前的线程同步上下文。但是,假设.Result不会导致问题,则有一个属性可以限制允许的同时连接数。但是,除非您明确设置它,否则它实际上并没有做任何事情,并且您可以轻松地让HttpClient尝试同时发出100个请求。
所以,试着添加这一行,
ServicePointManager.DefaultConnectionLimit = ServicePointManager.DefaultConnectionLimit;
我知道它看起来很愚蠢,但它实际上会将同时连接的数量限制为2.这可能会阻止您看到的任何奇怪问题。