【发布时间】:2012-09-11 19:25:53
【问题描述】:
我正在考虑为 AsyncUI 和 WinRT XAML Toolkit 库中的等待扩展方法添加取消支持。似乎基本 Task 类没有内置的 Cancel() 方法或事件,并且依赖于我的任务需要定期检查的取消令牌。我认为在我的 UI 场景中没有意义,因为我的任务是使用 TaskCompletionSource 生成的,我想取消 UI 线程上的任务以响应事件,而不是在线程池线程上运行循环并检查令牌.
当 UI 事件发生时,我的任务当前完成 - 例如故事板完成或单击按钮,所以如果我想支持取消 - 我需要通过取消订阅事件和执行其他清理(如停止)来响应取消请求动画。
我正在考虑创建某种 CancellableUITask 基类,而不是使用 TaskCompletionSource,因此我可以公开我的任务使用者可以调用的 Cancel() 方法(例如,停止等待的动画以响应按钮单击) 和类似于虚拟 OnCancellationRequested() 方法的东西,我的情节提要等待任务可以覆盖它以执行清理。
这有意义吗?完成我在此处描述的内容的最佳方法是什么?
【问题讨论】:
-
我不明白。您的解决方案比使用
CancellationToken(可能使用Register()以避免轮询)和TaskCompletionSource.SetCanceled()更好吗? -
好吧,我不知道注册方法,这就是我问的原因。 :)
标签: wpf silverlight task-parallel-library winrt-xaml async-await