I'm not sure I understand your last statement in this comment.   What differs if the callback is fired immediately vs. waiting for the reply?   Does firing the callback immediately cause Initiate() to return too, or does it just enable the logic to wait for the next event?