最后使用了
Barrier
班级。
MSDN
屏障是一个用户定义的同步原语,用于
分阶段算法。。。
基本用法:
static barrier = new Barrier(N, (sprint) => { Console.WriteLine($"Current sprint: {sprint.CurrentPhaseNumber}");
然后,每次我们都希望快速任务等待我们刚刚添加的慢速任务:
barrier.SignalAndWait();
static Barrier barrier = new Barrier(2, (bar) =>
{
Console.WriteLine($"Current sprint number: {bar.CurrentPhaseNumber}.");
});
public static void task1()
{
Console.WriteLine("Start of sprint 1 (task1)");
barrier.SignalAndWait(); //Need to wait for task2 to complete sprint1 and proceed.
Console.WriteLine("End of sprint 1 (task1)");
Console.WriteLine("Start of sprint 2 (task1)");
barrier.SignalAndWait(); //Need to wait for task2 to complete sprint2 and proceed.
Console.WriteLine("End of sprint 2 (task1)");
}
public static void task2()
{
Console.WriteLine("Start of sprint 1 (task2)");
Thread.Sleep(2000);
barrier.SignalAndWait();
Console.WriteLine("End of sprint 1 (task2)");
Console.WriteLine("Start of sprint 2 (task2)");
Thread.Sleep(2000);
barrier.SignalAndWait();
Console.WriteLine("End of sprint 2 (task2)");
}