【发布时间】:2018-12-22 01:02:47
【问题描述】:
当我的应用程序启动时,我发出了大约 1000 个请求。调用 ~200 个请求后,只返回 ~10 个,然后我的应用程序挂起,不再返回任何结果。
我的代码如下所示:
// 文件1.cs
await Task.WhenAll(allUsers.Select(user => Connect(user)));
// File2.cs(在 Connect 方法中调用)
var result = await client.PostAsync($"https://url.com",
new FormUrlEncodedContent(parameters)))
HttpClient 是静态的,所以它不应该是太多实例的问题。
我尝试过以下解决方案:
- 设置 ServicePointManager.DefaultConnectionLimit = int.MaxValue
- 将 await client.PostAsync(...) 放在 using 语句中
- 使用 .ConfigureAwait(false)
- 设置超时值
- TPL 数据流 (ActionBlock),MaxDegreeOfParallelism 设置为 2
上述解决方案均未奏效,我已没有选择余地。有什么理由不能/不会抛出异常或返回值吗?并发请求过多时是否有可能出现死锁?任何建议都会有所帮助。谢谢
附言。我正在使用 .Net Core 2.1
【问题讨论】:
-
是的,您可能不想同时发出 1000 个请求。线程池和连接池可能已满。尝试做 5 个批次。
-
试过了。没用。我也更新了我的问题
-
你尝试的时候发生了什么?
-
这两行没有任何问题,但您将不得不显示更多代码。查看您的整个
Connect()方法会有所帮助。allUsers是如何填充的(如果是IEnumerable,它可能会在枚举时被填充,这会影响它的工作方式)? -
我也看不出这两行有什么问题。我建议完全注释掉网络调用,看看你的逻辑中是否存在其他死锁缺陷。
标签: c# .net .net-core httpclient dotnet-httpclient