C# 使用任务并行性动态创建在队列中运行某些方法的任务?

C# 使用任务并行性动态创建在队列中运行某些方法的任务?,c#,multithreading,task-parallel-library,C#,Multithreading,Task Parallel Library,我们的场景是动态创建任务(假设5个任务),并将5个任务分配给某个流程(假设有15个方法)。 我希望5个任务一次采取5种方法,如果任务中的任何一个任务完成,它应该采取另一种方法 谁能举例说明解决方案 一旦任何任务完成,我们必须将这些方法放入队列中以采用另一种方法。您不需要实现任何队列,您可以使用并行。ForEach 这正是它的设计目的。下面的示例显示了Parallel.ForEach的最简单用法秒表不是此功能的一部分,它仅用于测量执行时间 Stopwatch sw = new Stopwatch(

我们的场景是动态创建任务(假设5个任务),并将5个任务分配给某个流程(假设有15个方法)。 我希望5个任务一次采取5种方法,如果任务中的任何一个任务完成,它应该采取另一种方法

谁能举例说明解决方案


一旦任何任务完成,我们必须将这些方法放入队列中以采用另一种方法。

您不需要实现任何队列,您可以使用
并行。ForEach

这正是它的设计目的。下面的示例显示了
Parallel.ForEach
的最简单用法<代码>秒表不是此功能的一部分,它仅用于测量执行时间

Stopwatch sw = new Stopwatch();
List<Action> actions = new List<Action>();

actions.Add(() => { Thread.Sleep(1000); Console.WriteLine($"1 - {sw.ElapsedMilliseconds}"); });
actions.Add(() => { Thread.Sleep(10000); Console.WriteLine($"2 - {sw.ElapsedMilliseconds}"); });
actions.Add(() => { Thread.Sleep(3000); Console.WriteLine($"3 - {sw.ElapsedMilliseconds}"); });
actions.Add(() => { Thread.Sleep(3000); Console.WriteLine($"4 - {sw.ElapsedMilliseconds}"); });

sw.Start();
Parallel.ForEach(actions, new ParallelOptions
{
    MaxDegreeOfParallelism = 2
}, action => action());
对于设置为2的
MaxDegreeOfParallelism
,输出将如下所示:

1 - 1029
3 - 3005
4 - 6009
2 - 11049
请注意,它不维护收款顺序。可以看到,在开始时,两个线程执行了操作1和3。然后,线程1执行操作2,线程2执行操作4

对于等于4的
MaxDegreeOfParallelism
,输出明显如下:

1 - 1029
3 - 3005
4 - 6009
2 - 11049

因为4个线程同时执行了所有操作。

请尝试此链接,但不太清楚您在问什么。此外,这不是一个编码器服务平台。您必须向我们展示您迄今为止所做的尝试,并查看是否可以获得进一步的帮助。感谢您提供的解决方案,但在我的情况下,我希望使用参数执行操作。对于eg List actions=new List()@user3336576只需将其更改为Action,并以相同的方式使用它。
1 - 1029
3 - 3005
4 - 6009
2 - 11049