Что происходит под капотом, когда я вызываю MyEvent?.Invoke, MyEvent.BeginInvoke?

Что происходит под капотом, когда я вызываю у события MyEvent?.Invoke(), MyEvent.BeginInvoke() в с#?
В каким потоках происходит выполнение?
Какое отношение имеет к Dispatcher.Invoke(), Dispatcher.BeginInvoke().

по этому ответу недостаточно понятно, поэтому спрашиваю.

Правильно ли я понял:
При MyEvent?.Invoke() выполнение останавливается, пока не будут выполнены все привязанные обработчики событий.
При MyEvent?.BeginInvoke() выполнение не останавливается, параллельно запускаются несколько потоков из ThreadPool на каждый привязанный обработчик?
  • Вопрос задан
  • 247 просмотров
Пригласить эксперта
Ответы на вопрос 1
Мне кажется, вот этот ответ достаточно хорош:
https://stackoverflow.com/questions/1916095/how-do...
Тоесть да. Будет взят поток из thread pool, но не забывай вызывать EndInvoke, иначе поток не вернётся в пул.

А вообще лучше вместо event-ов использовать Rx: https://github.com/dotnet/reactive
Если это делается в UI, то есть ещё надстройка поверх него: https://github.com/reactiveui/ReactiveUI
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы