如何检测循环中的任务

5
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","b"等待"c","c"又等待"a"。
显然,由于所有任务都无法完成,因此WaitAll返回false。
我的问题是 - 是否有任何方法,使用Task Parallel Library,可以检测任务在等待循环中的情况,并且最好禁止它?
(这是为了使我们能够通过重复使用现有任务来检测循环区域)

你为什么要使用 Task.WaitAll 来等待单个任务? - i3arnon
@i3arnon - 只是因为它更接近我们在现实中所做的事情 - 这显然是非常简化的! - Fergus Bown
你是在寻找编译时检测还是运行时检测?另外,你使用的 Visual Studio 版本是什么(可用选项可能会有所不同)。 - Scott Chamberlain
@Scott,这将在运行时进行,在现实中我们不会静态地添加任务,它们将根据许多因素而变化。 - Fergus Bown
1个回答

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接