Я когда слышу такое на собесе, спрашиваю что будет при вызове .GetAwaiter().GetResult() на таске, которую вернул Task.WhenAll(). Если несколько ожидаемых тасок свалилось.
Wait() оборачивает в AggregateException ошибку таска. У GetAwaiter().GetResult() же выбрасывается конкретная ошибка сразу, например InvalidOperationException. Учитывая, что в Task.WhenAll при использовании await тоже убирается AggregateException, я вижу схожесть подходов, а значит и упрощённый переход с синхронного на асинхронный код (логика обработки ошибок не поменяется)