Kullanıcı etkileşimi senaryolarım var Rx ile kullanmak istiyorum.Rx ve görevler - yeni görev oluşturulduğunda çalışma görevini iptal eder misiniz?
- : ama ben de gerek - "kullanıcı bazı işler yapmak, yazmayı bırakır zaman"
senaryo (1) (genellikle, kullanıcının o ana kadar yazılan ne aramak) kanonik benzer (2) sadece
(3) yeni bir iş birimi başladığında,
devam eden çalışmaları iptal (benim durumumda bu işlemci
- var (aşağıya bakınız) "do bazı iş" birimlerinin sonuçlarının son olsun yoğun)
(1) Kullanıcı olayları için IObservable
kullanıyorum, sadece olaylar arasındaki duraklamaları tetiklemek için .Throttle()
ile kısıtlıyorum ("kullanıcı yazmayı durdur").
Bundan i .Select(_ => CreateMyTask(...).ToObservable())
.
Bu, iç gözlenebilirlerin her birinin tek bir görevi tamamladığı bir IObservable<IObservable<T>>
verir.
Almak için (2) Sonunda sadece en yeni iş biriminden sonuçlar almak için .Switch()
'u uygularım.
Peki ya (3) - bekleyen görevleri iptal et? Dispose()
onları neden öncekine (ler) den
IObservable<T>
geldiği zaman Eğer doğru anlamak
, .Switch()
yöntem ona abone ve abonelikten.
Belki de bir şey iptal etme görevini tetiklemek için kablolanabilir?
Hayır, Görev'i kullanma gereksinimim yok. Tek bir işlemde yoğun işlem yapılmasını doğal olarak hissettiriyordu. Çözüme iyi bakacağım :) –
@CristiDiaconescu - Dürüst olmak gerekirse, TPL'nin ne için gittiğini görebiliyorum, ancak her zaman Rx'i kullanan çözümlerimin her zaman çok daha iyi ve çok daha etkileyici olduğunu buldum. TPL'den Rx lehine çıkmaya çalışıyorum. – Enigmativity
Eğer Rx'i kucaklıyorsanız, önerilen 'Start' yönteminiz' Start (Func work) 'olarak anlaşılması daha kolay hale getirilebilir ve özel bir atılabilirlik yerine jetonu oluşturmak için' CancellationDisposable' kullanılır. Ya da, * gerçekten * Eğer Rx: 'Başlat (Func , T> çalışma)' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' * '*' * '*' *, 'Aboneliğiniz eldeyken iptal edeceğini bildiren bir 'AsyncSubject' verir. 'Func ' sadece Rx’in ruhu içinde değil, karmaşıktır. –
Brandon