Enumerators are exhausted when you step through them, so any signal-based evaluation of it has side effects. A promise is a clearer representation that it's one-shot, IMO.