如何从一个ReactiveCommand中取消一个Observable

本文关键字:一个 取消 Observable ReactiveCommand | 更新日期: 2023-09-27 18:04:44

我有以下内容:

Compress = this.WhenAnyValue(x => x.ImagesCount, x => x > 0).ToCommand();
var process = Compress.RegisterAsync(ConvertImages);
var subscription = process.Subscribe(x => Images.Remove(x));
CancelConversion = this.WhenAnyValue(x => x.ImagesCount, x => x.IsBusy, (count, busy) => count > 0 && busy).ToCommand();
CancelConversion.RegisterAsyncAction();

其中ConvertImages(object o)是ViewModel的私有方法,反过来,调用并返回服务类中ConvertImages(IEnumerable<ImageDto> images)的结果,该服务类调整和压缩图像并返回IObservable<ImageDto>

Paul Betts在这里建议通过实现我的IObservable来实现取消,例如使用Observable.create,所以有人能提供一个如何实现这样的可观察对象的例子吗?

还有什么是RxUI™如何表示取消?我应该在CancelConversion.RegisterAsyncAction()subscription.Dispose()吗?我应该将.TakeUntil(CancelConversion.Execution_Signaled)添加到var process,我如何确定"cancelconversion . execution_signals"?

如何从一个ReactiveCommand中取消一个Observable

这很简单:

CancelConversion = this.WhenAnyValue(x => x.ImagesCount, x => x.IsBusy, (count, busy) => count > 0 && busy).ToCommand();
this.WhenAnyValue(x => x.ImagesCount, x => x > 0).ToCommand();
var process = Compress.RegisterAsync(x => ConvertImages().TakeUntil(CancelConversion));
var subscription = process.Subscribe(x => Images.Remove(x));

处理实际的取消(即停止ConvertImages正在做的任何工作)取决于你对ConvertImages的实现。