1

我试图在这个例子中链式执行任务:

static List<Task> clsTaskList = new List<Task>();

private static void Tasks2()
{
    Task t1 = new Task(() =>
    {
        Console.WriteLine("Main task started.");
        Thread.Sleep(15000);
        Console.WriteLine("Main task finished");
    });

    Task t2 = new Task(() =>
    {
        Console.WriteLine("Task 2 started");
        Thread.Sleep(15000);
        Console.WriteLine("Task 2 finished");
    });

    clsTaskList.Add(t1);
    t1.Start();

    clsTaskList.Add(t2);

    Task prevTask = clsTaskList.Last(p => p.IsCompleted == false);
    prevTask.ContinueWith(t => t2.Start());
}

我要做的是将继续任务绑定到集合中的最后一个任务。但是在示例中,只执行了第一个任务。当我检查集合时,第一个任务RanToCompletion的状态是,但第二个任务的状态是Created. 我错过了什么吗?

4

1 回答 1

4

prevTask t2我运行它的时候;您基本上所说的是“t2完成后,开始t2”-显然这不会发生。重要的是,在Last运行时,两个任务都没有完成 - 所以没有完成的“最后一个”任务是列表中的最后一个是有意义的,t2.

选项:

  • 明确使用t1.ContinueWith
  • 使用类似的东西Task.WhenAny
于 2013-07-16T09:06:56.920 回答