continuewith任务未执行

时间:2013-07-16 08:58:43

标签: c# task-parallel-library

我正在尝试在此示例中链接任务的执行:

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());
}

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

1 个答案:

答案 0 :(得分:4)

我运行时,

prevTask t2;你基本上说的是“当t2完成时,开始t2” - 显然不会发生。重要的是,在Last运行时,任何任务都没有完成 - 所以有意义的是,尚未完成的“最后”任务是列表中的最后一个, t2

选项:

  • 明确使用t1.ContinueWith
  • 使用Task.WhenAny
  • 之类的内容