mm.. this looks too complex, what logic do you want here? what are running_observers_ for? what are removing_observers_ for? can we just forget about detached observer and go further (ignoring its finish callback )?