Есть объект, на него подписываются несколько разных observer-ов. Когда им приходит уведомление, в результате действий одного из observer-ов подписывается еще один. Список обнаруживает, что его изменили во время итерации и падает на assert-е (вполне обоснованно, ИМХО). Как с таким обычно борются?
Мне в голову приходит два варианта: во-первых, можно делать копию списка (copy-on-write) и итерироваться по неизменяемой копии; во-вторых можно откладывать выполнение действий, которые могу привести к изменению списка observer-ов, до следующего витка eventloop-а. Чем может быть чреват каждый из этих вариантов?