public void OnResponseMessage(ResponseMessage response, MessageHandleContext currentAtomicContext) { ResponseWaitingItem waitingItem; if (_responseWaitingItems.TryRemove(response.RequestId, out waitingItem) == false) { return; } // Because OnResponseMessage is always called in a message loop of actor, // it's safe to run post callback synchronously if possible. // This optimization remove one message hop. ActorSynchronizationContext.EnableSynchronousPost(currentAtomicContext); waitingItem.ResponseHandler(waitingItem.TaskCompletionSource, response); }