通过对 Web 服务的必要调用来处理大量任务,而不会阻塞

本文关键字:任务 处理 Web 服务 调用 | 更新日期: 2023-09-27 18:35:18

在我的服务器应用程序中,我想处理大量来自客户端的任务。客户端应用程序提交用于处理的任务,处理每个任务都需要调用 Web 服务进行预处理,然后进行实际处理。

有人建议我有一个队列,我将把服务器接收的所有任务都放进去。然后,线程从队列中选取任务并调用 Web 服务。如果一个在 Web 服务上阻塞,那么可能有 40 个线程在执行此操作,其他线程也可以执行调用,从队列中获取项目。线程收到来自 Web 服务的响应后,它将预处理的项目放在第二个队列中,另一个线程从该队列中获取任务进行处理。并且此队列将有 1 个线程(将进一步扩展每个处理器 - 因此在 4 核机器上可能有 4(或更多)线程)。

我相信这可以更有效地完成,而无需 40 个预定义线程执行 Web 服务调用并且可能有 1 个队列。我认为有多种选择可以更有效地执行此操作.NET。有什么建议吗?

如何更好地实现这样的系统而不是特定于.net的系统可能是更广泛的问题。

通过对 Web 服务的必要调用来处理大量任务,而不会阻塞

我认为您应该了解 .net 4.5 中可等待的异步/等待构造。很难说它是否满足您的所有要求,但您应该检查一下。

我建议研究TPL Dataflow,这是一个库,允许您定义用于数据处理的"管道"或"网格",然后将数据通过它。TPL Dataflow与异步(例如,Web请求)块和同步(例如,处理)块配合得很好,并且有很多并行性选项。

如果由于某种原因您没有达到框架的 4.5 版,请将单向 WCF 调用视为一种"即发即弃"方法。