private void ClientScheduleOnReceivedMessage(NativeActivityContext executionContext, ReceiveMessageInstanceData instance) { if (instance.CorrelationRequestContext.TryGetReply()) { this.ClientScheduleOnReceiveMessageCore(executionContext, instance); this.FinalizeScheduleOnReceivedMessage(executionContext, instance); } else { VolatileReceiveMessageInstance instance2 = new VolatileReceiveMessageInstance { Instance = instance }; this.receiveMessageInstance.Set(executionContext, instance2); if (this.onClientReceiveMessageComplete == null) { this.onClientReceiveMessageComplete = new CompletionCallback(this.ClientScheduleOnReceiveMessageCallback); } executionContext.ScheduleActivity(this.waitForReply, this.onClientReceiveMessageComplete); } }
void ClientScheduleOnReceivedMessage(NativeActivityContext executionContext, ReceiveMessageInstanceData instance) { Fx.Assert(instance.CorrelationRequestContext != null, "Client side receive must have CorrelationRequestContext"); // client side: retrieve the reply from the request context if (instance.CorrelationRequestContext.TryGetReply()) { // Reply has already come back because one of the following happened: // (1) Receive reply completed synchronously // (2) Async receive reply completed very quickly and channel callback already happened by now ClientScheduleOnReceiveMessageCore(executionContext, instance); FinalizeScheduleOnReceivedMessage(executionContext, instance); } else { // Async path: wait for reply to come back VolatileReceiveMessageInstance volatileInstance = new VolatileReceiveMessageInstance { Instance = instance }; this.receiveMessageInstance.Set(executionContext, volatileInstance); if (onClientReceiveMessageComplete == null) { onClientReceiveMessageComplete = new CompletionCallback(ClientScheduleOnReceiveMessageCallback); } executionContext.ScheduleActivity(this.waitForReply, onClientReceiveMessageComplete); } }