2012-04-25 8 views
1

私のアプリケーションでは、ネットからデータを取得するための一連のWebリクエストコールを使用しています。つまり、1つのリクエストの結果から、他のリクエストなどを送信します。しかし、私はWebリクエストを処理しているとき、親リクエストだけが破棄されています。 2つのリクエストはまだ実行中です。どのように私はこれらのすべての要求をRxで取り消すことができますWindows Phone 7でネストされたRx Webリクエストコールを処理する方法

+1

あなたのコードを投稿してください。

var subscription = initialRequest.GetObservableResponse() .SelectMany(initialResponse => { // Feel free to use ForkJoin or Zip (intead of Merge) to // end up with a single value return secondRequest.GetObservableResponse() .Merge(thirdRequest.GetObservableResponse()); }) .Subscribe(subsequentResponses => { }); 

IDisposableモデルを使用するには。シンプルな 'SelectMany'クエリを使用すると、問題を1行で解決できますが、コードを参照することなく状況にどのように適用できるか説明するのは難しいです。 – Enigmativity

答えて

2

、あなたはモナドを破ることはできませんいずれか、またはあなたがIDisposableモデルに動作することを確認する必要があります。

はモナドを維持するために(。すなわちIObservablesにこだわる):

var subscription = initialRequest.GetObservableResponse() 
    .SelectMany(initialResponse => 
    { 
     return Observable.CreateWithDisposable(observer => 
     { 
      var secondSubscription = new SerialDisposable(); 
      var thirdSubscription = new SerialDisposable(); 

      secondSubscription.Disposable = secondRequest.GetObservableResponse() 
       .Subscribe(secondResponse => 
       { 
        // Be careful of race conditions here! 

        observer.OnNext(value); 
        observer.OnComplete(); 
       }); 

      thirdSubscription.Disposable = thirdRequest.GetObservableResponse() 
       .Subscribe(thirdResponse => 
       { 
        // Be careful of race conditions here! 
       }); 

      return new CompositeDisposable(secondSubscription, thirdSubscription); 
     }); 
    }) 
    .Subscribe(subsequentResponses => { }); 
1

説明したようにTakeUntil extnsionメソッドを使用して約1つです。hereあなたのケースでは、このメソッドをパラメータとしてとるイベントは、親リクエストによってスローされるイベントです。

私たちにいくつかのコードを示すことができれば、より具体的に問題に直面する可能性があります。

について、すべてを終了するサブスクリプションのために

関連する問題