Windows phone 7 如何在Windows Phone 7中处理嵌套的Rx web请求呼叫

Windows phone 7 如何在Windows Phone 7中处理嵌套的Rx web请求呼叫,windows-phone-7,windows-phone-7.1,system.reactive,Windows Phone 7,Windows Phone 7.1,System.reactive,在我的应用程序中,我使用web请求调用链从网络中获取数据。根据一个请求的结果,我将发送另一个请求,依此类推。但是当我处理web请求时,只有父请求在处理。另外两个请求仍在运行。如何在Rx中取消所有这些请求一种方法是使用所述的TakeUntil扩展方法。在您的情况下,将此方法作为参数的事件可能是父请求引发的某个事件 如果你能给我们看一些代码,我们可以更具体地面对这个问题 关于,对于要终止所有内容的订阅,您要么不能破坏monad,要么需要确保您使用的是IDisposable模型 要保留monad(即使

在我的应用程序中,我使用web请求调用链从网络中获取数据。根据一个请求的结果,我将发送另一个请求,依此类推。但是当我处理web请求时,只有父请求在处理。另外两个请求仍在运行。如何在Rx中取消所有这些请求一种方法是使用所述的TakeUntil扩展方法。在您的情况下,将此方法作为参数的事件可能是父请求引发的某个事件

如果你能给我们看一些代码,我们可以更具体地面对这个问题


关于,

对于要终止所有内容的订阅,您要么不能破坏monad,要么需要确保您使用的是
IDisposable
模型

要保留monad(即使用iObservable):

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

请张贴您的密码。使用一个简单的
SelectMany
查询可以在一行中解决您的问题,但是如果不参考您的代码,很难解释它将如何应用于您的情况。
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 => { });