Sobes.tech
Назад к вопросам
Middle
5

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

Компании, где спрашивали
PyrusPyrus

Ответ от нейросети

sobes.tech AI

Возвращать 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();
}