7

我想在 Windows Azure 的 Worker 进程中使用 TPL。我希望在队列中添加一个 IJob,它有一个 Run 方法,因此工作人员将包括:

loop get item off queue 使用 TPL 调用 IJob.Run,​​这是一个异步调用

但我有点担心我可以添加到 TPL 的最大项目?如果需要,我很乐意构建自己的某种 TPL 池,只需检查它的功能即可。

干杯,阿什。

4

1 回答 1

11

TPL 的主要目标之一是消除对此的担忧。通过将您的工作分解为任务而不是线程,您可以让调度程序更适当地处理这种平衡。

您可以安排的“任务”数量没有固定上限。它们(默认情况下,使用默认的 TaskScheduler)使用 ThreadPool 进行调度,从 .NET 4 开始,它会根据工作进行扩展。我强烈建议不要尝试建立自己的池 - 你不太可能比默认池做得更好。话虽如此,如果您的任务具有非常非标准的行为,您可能需要考虑编写自定义 TaskScheduler。

另外-意识到理想情况下,您应该使您的任务“尽可能大”。与单个任务相关的开销 - 让它们太小(就工作而言)将导致开销对性能的影响大于如果您有适当数量的较大“任务”。

于 2011-01-19T20:45:20.510 回答