ReactiveUI:如何从 ReactiveCommand 取消 Observable?

Luc*_*chi 2 c# reactiveui

我有以下内容:

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();
Run Code Online (Sandbox Code Playgroud)

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

Paul Betts 建议在这里IObservable通过我的例如 using的实现来实现取消Observable.create,那么任何人都可以提供如何实现此类 Observable 的示例吗?

另外,RxUI™ 发出取消信号的方式是什么?我应该subscription.Dispose()进去CancelConversion.RegisterAsyncAction()吗?我应该添加.TakeUntil(CancelConversion.Execution_Signaled)var process,如何确定“CancelConversion.Execution_Signaled”?

Ana*_*tts 5

这相当简单:

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));
Run Code Online (Sandbox Code Playgroud)

处理实际的取消(即停止 ConvertImages 真正执行的任何工作)取决于您的 ConvertImages 的实现。