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が、2 番目のタスクのステータスはCreatedです。何か不足していますか?

4

1 に答える 1

4

prevTask 私が t2それを実行したときです。あなたが基本的に言ったことは、「t2終了したら開始するt2」ということです-明らかにそれは起こりません。重要なのは、Last実行時にどちらのタスクも終了していないことです。したがって、終了していないタスクの「最後」がリストの最後のタスクであることが理にかなっていt2ます。

オプション:

  • 明示的に使用t1.ContinueWith
  • のようなものを使用しますTask.WhenAny
于 2013-07-16T09:06:56.920 に答える