异步web服务线程限制c#

本文关键字:线程 web 服务 异步 | 更新日期: 2023-09-27 18:18:19

我们正在开发一个应用程序,其中在UI中调用服务(WCF)层,并且驻留在服务层中的组件异步调用外部web服务。例如:UI发送说通过上传文件调用WCF层,如果文件有1000个条目,目前我们在一个循环(BeginxxxMethod)中异步调用外部服务1000次以获得响应。这是正确的做法吗?第二个问题:可以建立的最大异步连接数是多少?我们的技术是ASP。. NEt和c# 4.0

异步web服务线程限制c#

两个建议:

  • 如果你控制web服务API添加另一个方法,让你传递所有1000个参数并返回所有结果。这是厚实的vs聊天,所以你只需要经历一次跨进程的痛苦。
  • 如果你不控制web服务API,想出一个包装器,同步进行n次远程调用,然后异步调用这个包装器n次。在异步调用的数量和每个异步调用的顺序远程调用的数量之间找到最佳平衡。

这样做是正确的吗?

异步调用通常是完成大型批处理任务的最佳方式。我觉得你用这种方法看起来不错。作为一名开发人员,我们的工作通常是查看在哪些地方减少新的线程不再优化响应时间。Myles提到了使用服务的包装器。我经常在一次打1000个电话的时候这样做……调用几千个异步调用实际上会影响性能(在我的应用程序中),因此我创建了一次将几百个调用(异步)分组的功能,直到所有x- 1000个调用都完成。这给了我两个世界最好的东西……我能够立即找到异步调用的点数,这给了我最好的性能,并从那里开始。

就最大线程数而言,它取决于资源,但这里有一个解释默认值的链接…为了方便,我将在下面发布

 1023 in Framework 4.0 (32-bit environment)
 32768 in Framework 4.0 (64-bit environment)
 250 per core in Framework 3.5
 25 per core in Framework 2.0

我们通过实现任务并行库解决了这个问题。下面是伪代码。

  1. 读取文件内容到通用列表
  2. 使用Parallel for来处理每个请求,并根据服务器中处理请求的处理器数量设置MaxDOP(并行度)。

谢谢