c# - 尝试在非 HttpClient 套接字上进行操作

标签 c# dotnet-httpclient

我有一个非常简单的方法,基本上从传入的 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/

相关文章:

.net - 在 HttpClient 上设置代理时出现问题

unit-testing - 在 VS 2013 中使用 HttpClient 代理类对 Web API 进行单元测试

方法签名上的 C# 参数不会破坏重写/实现

c# - 单元测试 WPF 中的 ResourceDictionay

c# - 是否有一些正确的方法可以为 IEnumerable 模型字段添加模型错误以突出显示 View 中的特定输入但不是全部?

c# - 在 C# 中模拟 Postman Post - RestSharp

c# - 是否可以获取通过异步连接发送的数据?

c# - 持久集合和标准集合接口(interface)

mocking - 使用模拟 HttpMessageHandler 时如何使用 HttpClient 管理 cookie

Delphi:TIdHTTP 与 TNetHTTPClient