通过取消实现延迟执行任务

时间:2010-12-01 22:03:12

标签: .net wpf asynchronous cancellation

我有一种情况,我希望允许用户键入WPF TextBox,在每次击键时我调用OnPropertyChanged并推送到我的绑定源(使用SourceUpdatedTrigger = PropertyChanged)我希望在尝试之前有一个短暂的延迟处理数据(比如...... 1秒)把它想象成一个拼写检查系统,等待用户在告诉他们不能拼写之前停止打字。

我的问题是:

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

工作正常,直到你真正取消,但随后取消令牌来源永远处于“取消请求”状态,我必须重新安置CTS ...这似乎......从根本上错了......有没有更好的“重置”CTS的方法,但仍然通知现有的令牌他们应该取消?

1 个答案:

答案 0 :(得分:2)

不,CancellationTokenSource只能取消一次 - 正如您所说,您需要在取消它之后创建一个新的,以便进一步完成任务。