class Program
{
private static Task[] tasks;
static void Main(string[] args)
{
tasks = new Task[]
{
new Task(() => Task.WaitAll(tasks[1])),
new Task(() => Task.WaitAll(tasks[2])),
new Task(() => Task.WaitAll(tasks[0])),
};
tasks[0].Start();
tasks[1].Start();
tasks[2].Start();
Console.WriteLine(Task.WaitAll(tasks, 5000));
Console.ReadLine();
}
}
在上面的代码示例中,我设置了三个任务" a"," b"," c"在哪里" a"等待" b"等待" c"等待" a"。
显然,WaitAll会返回false,因为所有任务都无法完成。
我的问题是 - 有没有办法,使用任务并行库,检测任务在一个周期中等待的情况,最好是不允许它?
(这是为了让我们通过重用现有任务来检测循环区域)
答案 0 :(得分:0)
您需要查看directed graphs和strongly connected component。
您可以在实例化它们时构建任务图表,然后计算强连接组件。为此,您可以使用Tarjan's algorithm,here是C#中的实现。
或者您可以使用像Quickgraph这样处理它的库。