У меня есть следующее:
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
, так может ли кто-нибудь представить пример того, как реализовать такой 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));
Обработка фактического аннулирования (т.е. Прекращение любой работы, которую действительно выполняет ConvertImages) зависит от вашей реализации ConvertImages.
TakeUntil()
будетDispose()
подписки , как только он закончил правильно? Спасибо за ответ.