【问题标题】:how to cancel a Task when the CancellationTokenSource is not available?当 CancellationTokenSource 不可用时如何取消任务?
【发布时间】:2011-07-30 23:03:04
【问题描述】:

我有一个函数,它返回一个任务来做任何事情。

我有一个自定义表单 ProgressDialog,它的构造函数需要一个 Task 来执行。此对话框显示任务的状态,但并不重要。

对话框有一个取消按钮。如果用户点击它,任务应该被取消,但我该怎么做呢?我只有 Task 对象,没有 CancellationTokenSource(我可以用它取消 Task)。

为什么我不能通过任务对象本身取消任务?

【问题讨论】:

  • 这就是 MS 实现 Task 的方式......另一点:取消令牌允许“合作”取消以避免数据丢失/损坏......这就是你不想使用的原因是吗?
  • Task 拥有 CancellationTokenSource 属性是可行的。为了我。原因在我的问题中。当用户点击取消按钮时,我会做这样的事情:task.CanncellationTokenSrc.Cancel();

标签: c# multithreading asynchronous task cancellation


【解决方案1】:

简短的回答是你不能这样做。如果你想取消某些东西,你需要提供某种形式的取消令牌。此处很好地概述了预期的模式:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    相关资源
    最近更新 更多