TPL任务/线程管理

时间:2016-12-15 14:02:39

标签: c# multithreading task-parallel-library

我有一些'客户' (在抽象意义上),对于每个客户,有数百个工作/任务要定期完成。这些作业基本上是基于网络的API调用和数据库操作。因此,让我们说每个客户应该每K分钟完成一次工作(在此客户的最后一个工作完成之后)。 K也依赖于客户端(某些需要更高的频率)。如果作业耗时太长(时间也取决于客户端),则需要停止并重新启动它们。

现在创建一个计时器(为每个客户端)生成一些线程(T)(对于每个客户端)(线程数取决于客户端)。线程超越了客户的工作。如果他们花了太长时间,他们就会流产。这太丑了。客户端的工作完成后,重启计时器。

一个重要的事情是某些客户的并行度存在实际限制(现在T号处理这个问题)。越过一些线程会减慢外部系统的速度。

我怎样才能使用TPL实现这一点?

如果我只是为所有客户创建Tasks并执行一些简单的事情,例如Parallel.Foreach,我无法控制每个客户的并发作业数。

我可以将我的线程转换为任务,并为每个客户端单独执行Parallel.Foreach(或其他机制,如Task.WhenAll),在其自己的计时器中。

那会没事吗?

0 个答案:

没有答案