Полагаю, пришло время закрыть это своими собственными результатами.
Я не смог найти каких-либо прямых указаний в документах, но решил следовать информации, которую я извлек из блога Рэймонда Чена.В своих сообщениях (я забыл точные ссылки) он упоминает, что правила Win32 API предписывают, что дескриптор события должен оставаться действительным в течение всего времени ожидания.В неуправляемом мире это означает, что по крайней мере один дескриптор события должен оставаться открытым.
AFAIU, реализация .NET использует Win32 API под капотом, причем каждый экземпляр EventWaitHandle соответствует отдельному неуправляемому событию.Когда EventWaitHandle.Dispose () закрывает единственный дескриптор базового неуправляемого события, это фактически делает экземпляр события недействительным.
Короче говоря, кажется, что правильным подходом является создание параллельной инфраструктуры, через которую издатель событий может уведомитьПотенциальные слушатели этого события скоро уйдут.Затем издатель должен подождать, пока все слушатели не «отписались» (то есть перестали ждать), прежде чем приступить к Dispose () экземпляру события.
Это большая бухгалтерия, но, в конечном счете, это только кажется правильным.Надеюсь, это поможет прояснить ситуацию и другим.