L'attuazione di un task di esecuzione ritardata con cancellazione
-
29-09-2019 - |
Domanda
Ho una situazione in cui voglio permettere all'utente di digitare in un WPF TextBox, su ogni sequenza di tasti che io chiamo OnPropertyChanged e spingere la mia fonte di legame (usando SourceUpdatedTrigger = PropertyChanged) Voglio che ci sia un breve ritardo prima di tentare di elaborare i dati (ad esempio ... 1 secondo) Pensate a questo come un sistema di controllo ortografico in cui si attende che l'utente di battitura fermata prima dicendo loro che non possono incantesimo.
Il mio problema è il seguente:
await TaskEx.Delay(1000, cts.Token);
await TaskEx.RunEx(PollAsync, cts.Token);
funziona bene fino a quando effettivamente annulla, ma poi la fonte di token cancellazione è permanantly nella "cancellazione richiesto" stato, e devo reinstanciate CTS ... questo sembra ... fondamentalmente sbagliato ... C'è una migliore modo per "resettare" il CTS, ma ancora di avvisare i token esistenti che dovrebbero annullare?
Soluzione
No, un CancellationTokenSource
può essere cancellato solo una volta -. Come dici, è necessario crearne uno nuovo dopo la cancellazione di esso, per ulteriori attività