Все самое полезное для C#-разработчика в одном канале.
Наши курсы: https://clc.to/y3LDtw
По рекламе: @tproger_sales_bot
Для обратной связи: @proglibrary_feeedback_bot
РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
Post #7045
3.21K
📎 async void: почему это почти всегда плохая идея
Методы
Почему вообще существует
Официальное правило звучит так:
Правильный обработчик выглядит примерно так:
Всё остальное —
Если видите
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта
#sharp_view
Методы
async void в C# выглядят безобидно, но скрывают ловушку. Если внутри такого метода возникнет исключение, поймать его стандартными средствами не получится. Оно просто вылетит в поток синхронизации и, скорее всего, уронит приложение.Почему вообще существует
async void? Всё просто: обработчики событий по соглашению возвращают void. Без поддержки async void нельзя было бы использовать async/await внутри них. Это единственный законный случай.Официальное правило звучит так:
async void допустим только как обработчик события, и такой метод не должен бросать исключения.Правильный обработчик выглядит примерно так:
private async void Button_Click(object sender, EventArgs e)
{
try
{
await DoSomethingAsync();
}
catch (Exception ex)
{
// обрабатываем ошибку здесь, не даём ей вылететь наружу
MessageBox.Show(ex.Message);
}
}
Всё остальное —
async Task или async Task<T>. Это позволяет нормально ловить исключения, ждать завершения и тестировать метод.Если видите
async void не в обработчике, это сигнал для ревью.📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта
#sharp_view
- 👍 7










