HttpClient因并发任务而挂起

时间:2018-12-22 01:02:47

标签: c# .net .net-core httpclient dotnet-httpclient

在我的应用程序启动时,我有大约1000个请求。调用〜200个请求后,仅返回〜10,然后我的应用程序挂起,不再返回任何结果。

这是我的代码:

// File1.cs

await Task.WhenAll(allUsers.Select(user => Connect(user)));

// File2.cs(在Connect方法内部调用)

var result = await client.PostAsync($"https://url.com", 
                    new FormUrlEncodedContent(parameters)))

HttpClient是静态的,因此实例太多不会有问题。

我尝试了以下解决方案:

  1. 设置ServicePointManager.DefaultConnectionLimit = int.MaxValue
  2. 在using语句中放置await client.PostAsync(...)
  3. 使用.ConfigureAwait(false)
  4. 设置超时值
  5. TPL数据流(ActionBlock),其中MaxDegreeOfParallelism设置为2

以上解决方案均未奏效,我的选择将用光。有什么理由不能/不会抛出异常或返回值?是否有太多并发请求导致死锁?任何建议都会有所帮助。谢谢

Ps。我正在使用.Net Core 2.1

1 个答案:

答案 0 :(得分:0)

确保api中的操作已被编写为异步方法(而不仅仅是控制器操作方法),并且最好检查具有未提交未提交事务隔离级别的sql脚本,并选择不带锁的基本并发执行查询实现(如果是sql db :)),因此api通常会做一些数据库读写操作