在我的服务器应用程序中,我想要处理来自客户端任务的大量内容。客户端应用程序提交处理和处理每个任务的任务,需要调用Web服务进行预处理,然后进行实际处理。
我被建议有一个队列,我将把服务器收到的所有任务放入其中。然后,线程从队列中获取任务并调用Web服务。如果一个阻止Web服务,其他也可以执行调用,从队列中拾取项目,则可能有40个线程执行此操作。在线程从Web服务接收响应之后,它将预处理的项放在第二个队列上,另一个线程从该队列获取要处理的任务。此队列将有1个线程(每个处理器将进一步扩展 - 所以4核计算机上可能有4个(或更多)线程。)
我相信这可以更有效地完成,而不需要40个预定义的线程进行Web服务调用,并且可能有1个队列。我认为有更多选择可以更有效地实现.NET。有什么建议吗?
可能更广泛的问题是如何更好地实现这样一个系统而不是.net特定的。
答案 0 :(得分:2)
我认为你应该了解.net 4.5中提供的async / await构造函数。很难说它是否符合您的所有要求,但您应该检查它。
答案 1 :(得分:1)
我建议查看TPL Dataflow,这是一个库,允许您为数据处理定义“管道”或“网格”,然后通过它放置数据。 TPL Dataflow适用于异步(例如,Web请求)块和同步(例如,处理)块,并且具有许多并行选项。
答案 2 :(得分:0)
如果由于某种原因你没有达到框架的4.5版本,那么将单向WCF调用视为一种“即发即弃”的方法。