Требуется ли Wait () после использования Task.Factory.StartNew ()?

Почти во всей документации, которую я видел по использованию C # 4.0 Task.Factory.StartNew, говорится, что для того, чтобы дождаться завершения Задачи, вам понадобится Wait. Но мое первоначальное тестирование показывает, что в этом нет необходимости. Может ли кто-нибудь еще дать мне подтверждение по этому поводу? Мне любопытно, почему так много онлайн и печатных ссылок говорят, что вы должны вызвать Wait.

Вот простое консольное приложение, которое показывает, что мне не нужен оператор Wait, поэтому я закомментировал его. Независимо от того, закомментировал я tsk.Wait () или нет, результат будет одинаковым.

Ожидаемый результат во всех случаях следующий:

Main thread starting.
After running MyTask. The result is True
After running SumIt. The result is 1
Main thread ending.

Код:

class Program
{
    // A trivial method that returns a result and takes no arguments.
    static bool MyTask()
    {
        Thread.Sleep(2000);
        return true;
    }

    // This method returns the summation of a positive integer
    // which is passed to it.
    static int SumIt(object v)
    {
        int x = (int)v;
        int sum = 0;
        for (; x > 0; x--)
            sum += x;
        return sum;
    }

    static void Main(string[] args)
    {
        Console.WriteLine("Main thread starting.");
        // Construct the first task.
        Task<bool> tsk = Task<bool>.Factory.StartNew(() => MyTask());
        // I found this Wait statement to be completely unnecessary.
        //tsk.Wait();
        Console.WriteLine("After running MyTask. The result is " +
        tsk.Result);
        // Construct the second task.
        Task<int> tsk2 = Task<int>.Factory.StartNew(() => SumIt(1));
        Console.WriteLine("After running SumIt. The result is " +
        tsk2.Result);
        tsk.Dispose();
        tsk2.Dispose();
        Console.WriteLine("Main thread ending.");
        Console.ReadLine();
    }
}
9
задан svick 30 November 2014 в 16:52
поделиться