尝试对不是具有HttpClient的套接字的操作进行操作

时间:2013-11-20 11:28:23

标签: c# dotnet-httpclient

我有一个非常简单的方法,它基本上从传入的URL列表中检索字符串内容:

foreach (var url in urls)
{
     var content = _httpClient.GetStringAsync(url).Result;
}

间歇性地,我得到以下异常:

  

尝试对非套接字

的操作进行操作

我怀疑我的连接已经用完了? 如果存在一些网络延迟(并且每个url返回需要一秒左右),我不会收到此错误。

有没有办法阻止这种情况?

1 个答案:

答案 0 :(得分:0)

使用.Result可能会导致问题,具体取决于当前的线程同步上下文。但是,假设.Result不会导致问题,则有一个属性可以限制允许的同时连接数。但是,除非您明确设置它,否则它实际上并没有做任何事情,并且您可以轻松地让HttpClient尝试同时发出100个请求。

所以,试着添加这一行,

ServicePointManager.DefaultConnectionLimit = ServicePointManager.DefaultConnectionLimit;

我知道它看起来很愚蠢,但它实际上会将同时连接的数量限制为2.这可能会阻止您看到的任何奇怪问题。