It doesn't make sense to return more progress than the event itself has *before* the event is dispatched, so it has to wait.
Why it doesn't make sense? What's wrong with it? I'm trying to understand why do you insist on complicating the implementation and I don't see where this assumption comes from.