Когда конкретное сообщение получено моим gen_event
процессом менеджера, я хочу, чтобы оно прекратилось после того, как все обработчики обработали его, и до того, как они получат и обработают любые другие события. Единственный способ найти это:
-module(manager).
...
stop(Reason) ->
gen_event:sync_notify(manager, {stop, Reason}),
gen_event:stop(manager).
Но для этого требуется, чтобы все обработчики возвращали remove_handler
из handle_event({stop, Reason}, State)
, иначе они могли бы обработать событие, отправленное из другого процесса после sync_notify
и до stop
. Я предпочел бы иметь подход, который не предъявляет никаких требований к обработчикам.