c# - HttpClient 挂起并发任务
问题描述
当我的应用程序启动时,我有大约 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)
- 设置超时值
- MaxDegreeOfParallelism 设置为 2 的 TPL 数据流 (ActionBlock)
上述解决方案都没有奏效,我的选择已经不多了。有什么理由不能/不会抛出异常或返回值吗?并发请求过多时是否有可能出现死锁?任何建议都会有所帮助。谢谢
附言。我正在使用.Net Core 2.1
解决方案
确保 api 中的操作已编写为异步方法(而不仅仅是控制器操作方法),并且更好地检查具有未提交事务隔离级别的正确 sql 脚本并选择没有锁定类型的基本并发执行实现的查询(如果sql db :) ) 因此 api 主要做一些数据库读取和写入
推荐阅读
- python - 使用 from Scratch 构建 Sklearn 的 (vectorizer.idf_) 函数
- docker - 寻找一种方法来列出来自 DockerHub 的 arm 架构的所有社区镜像(非官方)
- ios - 在 UIVisualEffectView 的底部添加淡入淡出
- spring - ClassLoader 在 kubernetes 找不到文件
- python-3.x - 为什么 memo[targetsum] = shortestcombination 在我的代码中产生错误
- zsh - linux终端提示符中的第三个“元素”是什么,它会影响程序的运行方式吗?
- electron - Electron builder extraFiles 只复制空目录没有文件
- html - 如何仅使用此 Div 创建此形状
- survival-analysis - 危险函数到 PDF 计算之间的转换
- flutter - Flutter 社交媒体应用通知页面错误