Исключение в методе отправки письма роняет весь процесс сервиса
public async void SendWelcomeEmail(User user)
{
await _mailer.SendAsync(user.Email, "Добро пожаловать");
}
// вызов
try { SendWelcomeEmail(user); }
catch (Exception ex) { _log.LogError(ex, "mail failed"); }
Когда почтовый сервер недоступен, catch не срабатывает, а процесс аварийно завершается. Почему?
- async void нельзя дождаться, его исключения не ловятся
- try/catch не работает с асинхронным кодом вообще
- SendAsync выбрасывает исключение синхронно
- Нужно ловить AggregateException вместо Exception
