Ответ 1
Цель состоит в том, чтобы заставить его выглядеть/действовать как синхронная версия. Джон Скит отлично справляется с этим в своей серии Eduasync, в частности, этой должности:
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.
Но то же самое не происходит при использовании ключевого слова ожидание.
Каково объяснение этого поведения?
Цель состоит в том, чтобы заставить его выглядеть/действовать как синхронная версия. Джон Скит отлично справляется с этим в своей серии Eduasync, в частности, этой должности:
В 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