我有以下内容:
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”?
这相当简单:
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 的实现。