Сегодня мы с моими коллегами обсуждали, как правильно обрабатывать исключения в С# 5.0 async, и мы задавались вопросом, не ожидает ли в ожидании сразу нескольких задач исключения, которые не распаковываются средой выполнения.
Рассмотрим следующий фрагмент кода:
async Task ExceptionMethodAsync()
{
    await Task.Yield();
    throw new Exception();
}
async Task CallingMethod()
{
    try
    {
        var a = ExceptionMethodAsync();
        var b = ExceptionMethodAsync();
        await Task.WhenAll(a, b);
    }
    catch(Exception ex)
    {
        // Catches the "first" exception thrown (whatever "first" means)
    }
}
Что происходит со второй задачей сейчас? Оба будут в неисправном состоянии, но второе исключение задачи теперь наблюдается или ненаблюдается?