Создание собственного пользовательского цикла.Цикл обработки сетевых событий
-
03-07-2019 - |
Вопрос
Несколько лет назад я прочитал книгу, в которой описывалось, как вы могли бы переопределить реализацию диспетчера событий по умолчанию в .NET с помощью вашего собственного процессора.
class foo {
public event EventHandler myEvent;
...
}
...
myFoo.myEvent += myBar1.EventHandler;
myFoo.myEvent += myBar2.EventHandler;
Всякий раз, когда срабатывает событие, будут вызываться обработчики myBar1 и myBar2.
Насколько я помню, реализация этого цикла по умолчанию использует связанный список и просто выполняет итерацию по списку и вызывает делегаты EventHandler по порядку.
Мой вопрос двоякий:
- Кто-нибудь знает, какую книгу я читал?
- Почему вы хотите переопределить реализацию по умолчанию (на которую можно найти ответ в книге)?
Редактировать:Книга, на которую я ссылался, действительно была CLR Джеффри Рихтера через C#
Решение
Это могла быть одна из многих книг или статей в Интернете.
Существуют различные причины, по которым вы можете захотеть изменить способ подписки на события:
- Если у вас много мероприятий, на многие из которых вы, возможно, не подписаны, вы можете захотеть использовать Список обработчиков событий чтобы снизить использование вашей памяти
- Возможно, вы захотите зарегистрировать подписку / отказ от подписки
- Возможно, вы захотите использовать слабую ссылку, чтобы время жизни подписчика не было привязано к вашему
- Возможно, вы захотите изменить блокировку, связанную с подпиской /отказом от подписки
Я уверен, что есть и другие - они у меня в голове не укладываются :)
Редактировать:Также обратите внимание, что есть разница между пользовательским способом обработки подписки / отмены подписки и пользовательским способом вызова события (которое может вызывать GetInvocationList и гарантировать, что вызываются все обработчики, независимо от исключений, например).
Другие советы
Кажется, я помню нечто подобное в CLR Джеффри Рихтера через C #. Изменить . Я точно помню, что он подробно об этом рассказывает.
Есть несколько разных причин взять на себя управление регистрацией события. Одним из них является уменьшение раздувания кода, когда у вас есть тонны событий. Я думаю, что Джеффри подробно рассказал об этом в книге ...