Реализация задачи отложенного выполнения с отменой

У меня есть ситуация, когда я хочу разрешить пользователю вводить текст в WPF TextBox, при каждом нажатии клавиши я вызываю OnPropertyChanged и нажимаю на свой источник привязки (используя SourceUpdatedTrigger = PropertyChanged). Я хочу, чтобы была небольшая задержка перед попыткой обработки данных (скажем ... 1 секунда) Подумайте об этом как о системе проверки орфографии, где она ждет, пока пользователь перестанет печатать, прежде чем сообщать им, что они не умеют писать.

Моя проблема:

 await TaskEx.Delay(1000, cts.Token);
 await TaskEx.RunEx(PollAsync, cts.Token);

работает нормально, пока вы на самом деле не отмените, но тогда источник токена отмены постоянно находится в состоянии "запрошена отмена", и мне нужно восстановить CTS ... это кажется ... в корне неверным ... Есть ли лучший способ " сбросить "CTS, но все же уведомить существующие токены о том, что они должны отменить?"


person Firoso    schedule 01.12.2010    source источник


Ответы (1)


Нет, CancellationTokenSource можно отменить только один раз - как вы говорите, вам нужно создать новый после того, как вы его отменили, для дальнейших задач.

person Jon Skeet    schedule 01.12.2010
comment
есть ли лучшая практика для такой обработки отложенного старта? - person Firoso; 02.12.2010
comment
@ Firoso: Я не знаю. Я не уверен, что отмена задачи - лучший подход здесь - возможно, просто не беспокойтесь об ее обработке, если она произойдет, если до этого было еще одно нажатие клавиши ... сохранить своего рода счетчик версий или что-то подобное? Точно сказать не могу. - person Jon Skeet; 02.12.2010
comment
@JonSkeet Привет. Не могли бы вы взглянуть на этот вопрос, пожалуйста? заранее спасибо - person agent47; 13.06.2013