title: Split an IObservable and then combine after processing?
body: <p>After experimenting with IObservables, I've decided to test them for the processing of incoming messages over a message bus. Essentially I get an <code>IObservable&lt;Request&gt;</code> and the <code>Request</code> contains the necessary functions to reply to the response.</p>
  
  <p>At a point during processing I have to deserialize the data and convert it from a Request to a Command object that contains what it actually needs to do. Command is not related to Request.</p>
  
  <p>After deserializing it I transform it into the proper response, however in order to send the response I need the original Request object. I want to try and achieve this while maintaining high code readability. So far I've used extension methods and lambda expressions to get the following (where <code>requests</code> is the <code>IObservable&lt;Request&gt;</code>):</p>
  
  <pre><code>requestProcessor = requests
              .Deserialize&lt;IdentityRequest&gt;()
              .Where(idRequest =&gt; idRequest.Address != null)
              .Select(idRequest =&gt; new IdentityResponse() {Identity = identityTable[idRequest.Address.Address]})
              .Serialize()
              .Zip(requests, (response, request) =&gt; new {request = request, response = response})
              .Subscribe(data =&gt; data.request.Respond(data.response, ObjectTypes.IdentityResponse));  
  </code></pre>
  
  <p>My question is, since all the commands before the <code>Zip</code> function take time to process, will the <code>Zip</code> operate on the same input object (ie. the original input, and also on the seperate processed input) if there are a constant stream of messages. How can I test this?</p>
  
  <p>Is there a better way of doing this?</p>