如何在 Windows Phone 7 中处理嵌套的 Rx Web 请求调用



在我的应用程序中,我正在使用Web请求调用链从网络获取数据。即从一个请求的结果,我将发送另一个请求,依此类推。但是当我处理 Web 请求时,只有父请求在释放。另外两个请求仍在运行。我如何在 Rx 中取消所有这些请求

要使订阅终止所有内容,您要么不能破坏 monad,要么需要确保在 IDisposable 模型中工作。

要保留 monad(即坚持使用 IObservables):

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模型,请执行以下操作:

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

一个合适的方法是使用TakeTill extnsion方法,如此处所述。在您的情况下,将此方法作为参数的事件可能是父请求引发的某个事件。

如果您能向我们展示一些代码,我们可以更具体地面对问题。

问候

相关内容

  • 没有找到相关文章

最新更新