Size: a a a

2020 February 19

AH

Ayrat Hudaygulov in pro.net
Дедлоки это общая проблема тасков, асинк войд тут вроде ничего нового не даёт
источник

s

semptra in pro.net
Ayrat Hudaygulov
Для именно что евент хендлеров это необходимое зло.

А сам по себе async void антипаттерн, так как нет возможности узнать что произошло в асинке, так как объекта таска нет и соответственно не поевейтить
Хорошо, опишу кейс конкретный - есть TextField, нужно отслеживать изменения в нем и выполнять какое-то действие в ивент хендлере, кусок кода в нем асинхронный
источник

s

semptra in pro.net
В таком случае async void допустимо использовать?
источник

AH

Ayrat Hudaygulov in pro.net
semptra
В таком случае async void допустимо использовать?
Ну да. Только не забывай вложенные таски в хендлере с конфигурЕвейтом звать
источник

s

semptra in pro.net
Или вот еще тогда - что если я хочу чтобы ивенты выполнялись строго последовательно? Можно ли заюзать какой-нибудь AutoResetEvent в нем чтобы в начале ивент хендлер его блочил, а в конце отпускал? Это будет мне гарантировать что они последовательно выполнятся?
источник

K

Katz in pro.net
semptra
Подскажите, в чем опасность использования async event handlers? Понятно что они async void, но что именно может пойти не так? И как в таком случае лучше вызывать асинхронный код, если делать их async нежелательно
Если эвент твой, то можно Deferred Events. Что-то типа такого https://www.pedrolamas.com/2017/04/04/await-your-event-handlers-completion-with-deferred-events/
источник

s

semptra in pro.net
Ayrat Hudaygulov
Ну да. Только не забывай вложенные таски в хендлере с конфигурЕвейтом звать
Хм, у меня это вряд ли получится. У меня есть вот такой старнный код - есть проперти
Task<IEnumerable<string» Options { get; }
Вот из этой проперти мне и надо получить результат внутри ивента
источник

AH

Ayrat Hudaygulov in pro.net
semptra
Хм, у меня это вряд ли получится. У меня есть вот такой старнный код - есть проперти
Task<IEnumerable<string» Options { get; }
Вот из этой проперти мне и надо получить результат внутри ивента
async void on_btnCkicked(...) {

var options = await Options.ConfigureAwait
btn1.text = options.Name
}
источник

AH

Ayrat Hudaygulov in pro.net
Ну ты понял
источник

s

semptra in pro.net
Ща попробую, но у меня, по-моему, не было ConfigureAwait почему-то на этом таске. Возможно я или студия упоролись
источник

NT

Nikita Tsukanov in pro.net
Ayrat Hudaygulov
Дедлоки это общая проблема тасков, асинк войд тут вроде ничего нового не даёт
это проблема в дизайне тасков
источник

NT

Nikita Tsukanov in pro.net
из-за существования возможности их синхронно ждать
источник

AH

Ayrat Hudaygulov in pro.net
Nikita Tsukanov
это проблема в дизайне тасков
Таки да.
источник

AH

Ayrat Hudaygulov in pro.net
То ли дело фшарповые асинки!
источник

AH

Ayrat Hudaygulov in pro.net
(пропаганда)
источник

s

semptra in pro.net
таски-то не для асинхронности разрабатывались изначально, насколько я помню
источник

s

semptra in pro.net
это ж уже потом на них эти await-ы накрутили
источник

Ɖ

Ɖrēw in pro.net
Ayrat Hudaygulov
То ли дело фшарповые асинки!
)))
источник

AT

Alexey Tkachenko in pro.net
Можно сделать Rx stream из события и прореживать события
источник

s

semptra in pro.net
Ayrat Hudaygulov
async void on_btnCkicked(...) {

var options = await Options.ConfigureAwait
btn1.text = options.Name
}
да, все ок, то я вчера упоролся
источник