Хорошо ли возвращать void в асинхронных методах? Подводные камни async void?

Возвращать void (в C# — async void) из асинхронных методов обычно не рекомендуется, кроме случаев обработки событий.

Короткий ответ

Что ответить на собеседовании

Возвращать void (в C# — async void) из асинхронных методов обычно не рекомендуется, кроме случаев обработки событий.

Подробный разбор

Ответ с пояснениями

Возвращать void (в C# — async void) из асинхронных методов обычно не рекомендуется, кроме случаев обработки событий.

Подводные камни async void:

  • Отсутствие возможности ожидать завершение: нельзя использовать await для async void, поэтому вызывающий код не знает, когда метод завершится.
  • Обработка исключений: исключения, выброшенные в async void, не могут быть пойманы через обычный try-catch вызывающего кода, что ведёт к аварийному завершению приложения.
  • Тестирование и отладка: сложнее контролировать и тестировать такие методы.

Лучше использовать async Task или async Task<T>, чтобы можно было корректно ожидать завершения и обрабатывать ошибки.

Пример правильного использования:

async Task DoWorkAsync() {
    await Task.Delay(1000);
}

// вызов
await DoWorkAsync();

async void допустим только для обработчиков событий, где сигнатура требует void:

async void Button_Click(object sender, EventArgs e) {
    await DoWorkAsync();
}

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку