在我的应用程序中,我使用网络请求调用链从网络获取数据。即根据一个请求的结果,我将发送其他请求,依此类推。但是当我处理 Web 请求时,只有父请求正在处理。另外两个请求仍在运行。我如何在 Rx 中取消所有这些请求
问问题
168 次
2 回答
2
为了使您的订阅终止所有内容,您要么不能破坏 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 => { });
于 2012-04-26T03:38:08.860 回答
1
一种方法是使用 TakeUntil extnsion 方法,如此处所述。在您的情况下,将此方法作为参数的事件可能是父请求引发的某个事件。
如果您可以向我们展示一些代码,我们可以更具体地解决问题。
问候,
于 2012-04-25T07:09:13.053 回答