在我的应用程序中,我正在使用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方法,如此处所述。在您的情况下,将此方法作为参数的事件可能是父请求引发的某个事件。
如果您能向我们展示一些代码,我们可以更具体地面对问题。
问候