0

我想知道是否存在可以管理一些“任务”的框架。

我知道Task Parallelism,但是(如果我错了,请纠正我)我认为它不符合我的需求(主要是因为它适用于完成的任务列表)。

我的基本需求是我想给 X 线程一些工作去做。

但是

  • 每个任务都可以生成创建新任务以在将来执行(可以是 0 个任务,也可以是 100 个任务
  • 如果我的任务列表为空,我希望我的非工作线程等待所有线程完成他们的任务,也许我有一个最后一个线程正在运行,这将生成 50 个其他 3 个线程可以处理的新任务。

你知道什么可以帮助我吗?还是我必须手动管理所有事情?

4

2 回答 2

6

TPL 将通过它的声音工作。您可以创建子任务,并且可以使用WaitAll来确保所有任务都已完成。

这样您也不必担心线程管理。

在不了解您的代码的情况下,它似乎可能类似于以下伪代码:

//for loop to create tasks
var task = new Task(()=>Task.Factory.StartNew(()=>dostuff));
taskList.Add(task)
//end for loop

Task.WaitAll(taskList);

更新

我也忘记了子任务需要在内部任务中标记,否则外部任务不会等待。这是关于嵌套任务以及如何使用它们的 MSDN。但是,简而言之,当您创建嵌套任务时,您必须将其标记为附加到父任务。

TaskCreationOptions.AttachedToParent
于 2012-07-02T13:21:46.227 回答
1

看看非常适合分布式并行任务处理的 Actor Framework,有一个列表,这里是.NET 上的一个

于 2012-09-07T13:31:15.393 回答