受控并行任务执行使用什么

Controlled Parallel task execution what to use

我正在 运行 对某些对象执行并行任务,为了加快速度,它们 运行 4 个并行。 现在有一个新的需求,我需要执行一个任务,要求一次执行一个任务,而其他任务必须等待(其他任务不能在执行另一个任务)。

我无法使测试同步。

请查看下面的图片以获得更好的解释。

一次执行一个就搞定了,但是想到用一个Semaphore来等待开头和结尾的4个对象。 问题是信号量不会等待所有完成以便让另一个信号量进入。

必须只有在所有 4 个都完成后才能开始和离开此执行。 我应该为此使用什么?

为此使用一个 Barrier 对象,参与计数为 4。这是一个示例:

var barrier = new Barrier(4);

然后在你的任务方法中:

//do some work

//now, wait
barrier.SignalAndWait();

所有方法都会等到所有参与者都调用了SignalAndWait(),然后它们才会继续。