2012-04-08 3 views
0

Ich benutze das Rx-Framework, um asynchrone Anfragen durchzuführen, das funktioniert alles OK, aber ich muss in der Lage sein, ein Statusobjekt zwischen der Anfrage/Antwort zu übergeben, sobald ich die Antwort verarbeitet habe , Ich muss einige zusätzliche Informationen wissen, die nur bekannt waren, als die Anfrage gemacht wurde, daher möchte ich irgendwie ein Zustandsobjekt übergeben.Zustand Objekt mit Observable.FromAsyncPattern <WebResponse>

Derzeit bin ich eine Methode wie:

public void ProcessGetRequest(WebRequest request, Action<WebResponse> handle, Action<Exception> error, int delaySeconds = 0) 
     { 
      request.Method = "GET"; 

      Observable.FromAsyncPattern<WebResponse>(request.BeginGetResponse, request.EndGetResponse)().Delay(new TimeSpan(0, 0, delaySeconds)).ObserveOnDispatcher().SubscribeOnDispatcher().Subscribe(handle, error); 
     } 

Auf der request.BeginGetResponse Methode, ich kenne Sie einen Zustand Objekt passieren kann, und Zugriff auf diesen Zustand Objekt über das IAsyncResult-Objekt zurückgegeben, aber kann nicht finden ein Möglichkeit, dies innerhalb des Rx/Observable-Rahmens wie oben zu tun. Weiß jemand wie ich das machen kann?

Antwort

0

Es sollte ganz einfach sein. Übergeben Sie den Staat über eine Schließung.

+0

Danke, ja das ist, was ich am Ende tun (siehe unten antworten) – Rosstified

0

am Ende tun ist wie folgt:

public void ProcessGetRequest<T>(WebRequest request, Action<WebResponse,T> handle, Action<Exception,T> error, T state, int delaySeconds = 0) 
     { 
      request.Method = "GET"; 

      Observable.FromAsyncPattern<WebResponse>(request.BeginGetResponse, request.EndGetResponse)().Delay(new TimeSpan(0, 0, delaySeconds)).ObserveOnDispatcher().SubscribeOnDispatcher().Subscribe(x=>handle(x,state),y=>error(y,state)); 
     } 
+0

Sie jetzt den Staat stark typisierten machen können. Es besteht keine Notwendigkeit mehr, sie zu "Objekten" zu machen. – Enigmativity

+0

guter Punkt, aktualisierte meine Antwort. – Rosstified

+0

Ausgezeichnet. Sieht sehr gut aus. – Enigmativity