【问题标题】:Implementing a delayed execution task with cancellation使用取消实现延迟执行任务
【发布时间】:2011-05-18 19:04:35
【问题描述】:

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

我的问题是:

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

在您实际取消之前工作正常,但是取消令牌源永久处于“请求取消”状态,我必须重新实例化 CTS...这似乎...根本错误...有没有更好的如何“重置” CTS,但仍通知现有令牌他们应该取消?

【问题讨论】:

    标签: .net wpf asynchronous cancellation


    【解决方案1】:

    不,CancellationTokenSource 只能取消一次 - 正如您所说,您需要在取消后创建一个新的,以便执行更多任务。

    【讨论】:

    • 对于这样的延迟启动处理是否有更好的“最佳实践”?
    • @Firoso:我不知道。我不确定取消任务是这里最好的方法 - 如果在那之前有另一个击键,可能只是在它发生时不要打扰它......保留一种“版本计数器”或类似的东西?不确定。
    • @JonSkeet 嗨。请看一下this question好吗?提前致谢
    猜你喜欢
    • 2015-09-14
    • 2013-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多