キャンセルを伴う遅延実行タスクの実装
-
29-09-2019 - |
質問
ユーザーがWPFテキストボックスに入力できるようにしたい状況があります。各キーストロークで、onpropertychangedを呼び出してバインディングソースにプッシュします(SourceUpdatedTrigger = PropertyChangedを使用)データを処理する前に短い遅延が必要です。 (たとえば... 1秒)これは、ユーザーがスペルができないと言う前に、ユーザーがタイピングを停止するのを待つスペルチェックシステムのように考えてください。
私の問題は次のとおりです。
await TaskEx.Delay(1000, cts.Token);
await TaskEx.RunEx(PollAsync, cts.Token);
実際にキャンセルするまで正常に動作しますが、キャンセルトークンソースは「キャンセル要求された」状態に永続的にあり、CTSを再度回復しなければなりません...これは根本的に間違っているようです...より良い方法はありますか?」 CTSをリセットしますが、それでもキャンセルする必要があることを既存のトークンに通知しますか?
解決
いや CancellationTokenSource
キャンセルすることは一度しかありません - あなたが言うように、あなたはそれをキャンセルした後、さらなるタスクのために新しいものを作成する必要があります。
所属していません StackOverflow