如何强制取消任务?

假设,有一项任务包含以下约:

Task someTask = new Task(() => { while(!IsCancellationRequested) { Do_something_over_a_long_period_of_time(); token.ThrowIfCancellationRequested(); Do_something_over_a_long_period_of_time(); token.ThrowIfCancellationRequested(); Do_something_over_a_long_period_of_time(); token.ThrowIfCancellationRequested(); } }); someTask.Start(); 

并且有非常不耐烦的用户。 他们渴望立即终止我的申请。 他们不想等待长时间的行动。

我曾经使用Thread类,并能够通过调用Abort()命令立即中止我的所有线程。

我如何立即中止我的任务?

谢谢。

他们渴望立即终止我的申请。 他们不想等待长时间的行动。

默认情况下,Tasks在ThreadPool上作为后台任务运行。 您可以安全地退出应用程序而无需担心后台线程。

因此,只要您想退出流程就没有问题。

请注意,Thread.Abort()很快但不安全。 甚至不是为了戒烟应用程序,但它很少会导致真正的问题。

您不能强制任务以不合作的方式中止。 以不受控制的方式中止线程是不安全的,因此故意不受支持。

你应该让你的Do_something_over_a_long_period_of_time调用取消(即传递令牌,并定期检查它们 )。

编辑:如另一个答案中所述,您可以通过确保所有前台线程都已终止来终止应用程序 。 但是你需要意识到你的任务不一定有机会彻底终止。 如果他们正在编写文件,您可能希望等到注意到取消,以避免破坏持久状态。