代码之家  ›  专栏  ›  技术社区  ›  CodingMadeEasy

HttpClient与并发任务挂起

  •  1
  • CodingMadeEasy  · 技术社区  · 7 年前

    当我的申请开始时,我有大约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)))
    

    我尝试过一些解决方案,例如:

    1. 设置ServicePointManager.DefaultConnectionLimit服务点管理器= 内景最大值
    2. 使用.ConfigureAwait(false)
    3. 设置超时值
    4. MaxDegreeOfParallelist设置为2的TPL数据流(ActionBlock)

    以上的解决方案都不起作用,我已经没有选择了。它不能/不会抛出异常或返回值有什么原因吗?是否存在并发请求过多导致死锁的可能性?任何建议都会有帮助。谢谢

    另外,我正在使用.Net Core2.1

    1 回复  |  直到 7 年前
        1
  •  0
  •   Susindar    7 年前

    确保api中的操作是以异步方法(不仅仅是控制器操作方法)编写的,最好检查具有读未提交事务隔离级别的正确sql脚本,并选择不带锁的查询类基本并发执行实现(如果是sql db:),因此api主要执行一些db读写操作