Выбросить исключение внутри задачи - "ждать" против "Подождите" ()

static async void Main(string[] args)
{
    Task t = new Task(() => { throw new Exception(); });

    try
    {                
        t.Start();
        t.Wait();                
    }
    catch (AggregateException e)
    {
        // When waiting on the task, an AggregateException is thrown.
    }

    try
    {                
        t.Start();
        await t;
    }
    catch (Exception e)
    {
        // When awating on the task, the exception itself is thrown.  
        // in this case a regular Exception.
    }           
}

В TPL, когда бросает исключение внутри задачи, оно завершается с помощью исключения AggregateException.
Но то же самое не происходит при использовании ключевого слова ожидание.
Каково объяснение этого поведения?

Ответ 2

В TPL AggregateException используется, потому что у вас может быть несколько задач в ожидании (задача может иметь дочерние задачи), поэтому многие из них могут генерировать исключения. Посмотрите раздел Исключения в дочерних задачах.

https://msdn.microsoft.com/ru-ru/library/dd997417(v=vs.110).aspx

В await у вас всегда есть только одна задача

См. также https://msdn.microsoft.com/ru-ru/library/dd997415(v=vs.110).aspx