我正在考虑为AsyncUI和WinRT XAML Toolkit库中的可等待扩展方法添加取消支持。似乎基本 Task 类没有内置的 Cancel() 方法或事件,并且依赖于我的任务需要定期检查的取消令牌。我认为在我的 UI 场景中没有意义,因为我的任务是使用 TaskCompletionSource 生成的,我想取消 UI 线程上的任务以响应事件,而不是在线程池线程上运行循环并检查令牌.
当 UI 事件发生时,我的任务当前完成 - 例如故事板完成或单击按钮,所以如果我想支持取消 - 我需要通过取消订阅事件和执行其他清理(如停止动画)来响应取消请求。
我正在考虑创建某种 CancellableUITask 基类而不是使用 TaskCompletionSource,因此我可以公开我的任务使用者可以调用的 Cancel() 方法(例如,停止等待的动画以响应按钮单击)等等就像我的故事板等待任务可以覆盖以执行清理的虚拟 OnCancellationRequested() 方法。
是否有意义?完成我在这里描述的内容的最佳方法是什么?