правда это плохой вариант, с какой стороны не посмотри - потребитель ожидает, что итератор пройдётся только по тем лисенерам, которые были на момент создания итератора
да, я добавляю лисенеры только после итерации, чтобы не уведомлять о значении, которое клиент уже видел