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);
            }
        }