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