Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
Заблокирован

Избегайте async void!?

16.03.2021, 18:43. Показов 1648. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Известна рекомендация "Избегайте async void". Причины этого растолкованы понятно.
При этом, исключением из этого правила являются обработчики событий - в них рекомендуется async void.
В связи с этим два вопроса:
1. Имеются ввиду обработчики событий вообще или событий именно в пользовательском интерфейсе (WinForms/WPF)?
2. А почему асинхронные обработчики этих событий не сделать типа Task? Это имеет какие-то минусы или это никогда не нужно?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.03.2021, 18:43
Ответы с готовыми решениями:

Async await ожидание void
await Task.WaitAll(tasks); Как можно реализовать? Если делать без асинхронности то получается программа ожидает и интерфейс зависает, а...

Зачем async void требует await?
Привет! У меня есть метод который долго кропотливо кое-что рисует, я его обозначил как async void, но студия предупреждает что без await...

System.Void из C# использоваться не может - для получения объекта типа void используйте typeof (void)
Изучаю с# по "Шилдт Г. - C# 4.0 полное руководство" При изучении конструктора возникла проблема: попытался запустить код на стр. 169, а...

6
 Аватар для Рядовой
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
16.03.2021, 19:13
titan4ik, асинхронные методы должны быть только в модели. Я думаю по этому нет обработчиков событий для контролов, которые возвращают Task.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
16.03.2021, 19:20
Лучший ответ Сообщение было отмечено titan4ik как решение

Решение

Цитата Сообщение от titan4ik Посмотреть сообщение
в них рекомендуется async void.
Не "рекомендуется", а в массе по-другому никак.

Цитата Сообщение от titan4ik Посмотреть сообщение
1. Имеются ввиду обработчики событий вообще
Ага

Цитата Сообщение от titan4ik Посмотреть сообщение
2. А почему асинхронные обработчики этих событий не сделать типа Task?
Попробуйте, о результатах сообщите
1
Заблокирован
16.03.2021, 19:25  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
Попробуйте, о результатах сообщите
Я предвидел подобный ответ на свой вопрос - в виде вопроса. Но если бы я знал ответ на свой вопрос, то не задал бы его и не получил бы такой вопрос в ответ

Не по теме:

P.S. Пардон, господа, ввиду временного поражения в правах не могу благодарить плюсиками

0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
16.03.2021, 19:28
Цитата Сообщение от titan4ik Посмотреть сообщение
Я предвидел подобный ответ на свой вопрос - в виде вопроса. Но если бы я знал ответ на свой вопрос, то не задал бы его и не получил бы такой вопрос в ответ
Это не встречный вопрос, а предложение проверить экспериментально: открыть Студию и повесить на событие обработчик, возвращающий Task.
1
Заблокирован
16.03.2021, 20:52  [ТС]
ОК, не вопрос, а конструктивное предложение убедиться в деструктивности такой идеи) ОК. Принимается.

Добавлено через 1 час 21 минуту
kolorotur,
спасибо, очень познавательно. Выходит, что всё-таки можно сделать обработчик события с типом Task, но для этого нужно использовать собственный тип делегата события. То бишь, отказаться от стандарта EventHandler, который void. Ну, не знаю зачем - если очень нужно отчего-то. Ясно, что этого лучше не делать.
Ещё чуть-чуть и начну писать книгу "C# чайнику от чайника" где всё по-человечески будет разъяснено
1
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
17.03.2021, 11:28
Цитата Сообщение от titan4ik Посмотреть сообщение
2. А почему асинхронные обработчики этих событий не сделать типа Task? Это имеет какие-то минусы или это никогда не нужно?
Дело в том что контролы изначально проектировали без оглядки на асинхронность. Все обработчики делали void т.к. ты можешь повесить 100500 Handler, каждый будет возращать свой результат, очередность никто не гарантировать и что делать с этим результатом -- непонятно.

Теперь появляются Task с async/await. Уже вроде можно агрегировать все таски и т.д., но нужна обратная совместимость.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.03.2021, 11:28
Помогаю со студенческими работами здесь

Async/ await как правильно ввести данные в async метод (консоль)
Привет , кто то может помочь ?) проблема в тому что у меня есть async метод который запускается из Main, по среди этого метода...

Почему в async void методе не перехватывается исключение?
Привет! В ряде статей читал о том, что в подобном случае исключение не перехватывается и программа в какой-то момент упадет: ...

WPF async void fun() для событий контролла. (MapCOntrol.WPF)
Задача: Отмечаем чекбокс элементы и рисуем их на карте. При нажатии на кнопку выполняется событие, где вызывается функция, в которой...

Дописать методы void pop_back(void); T& back(void); T& front(void); void erase (iterator p)
Задали задание, и не получается дописать оставшиеся методы: void pop_back(void); T& back(void); T& front(void); void erase...

Реализовать аналог `void *memmove(void *to, void *from, size_t n)`
Добрый день, подскажите пожалуйста, как реализовать такой метод самостоятельно? который копирует из одного массива в другой n элементов ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 30.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru