假设,有一项任务包含以下约:
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()
命令立即中止我的所有线程。
如何立即中止我的任务?
谢谢。
答案 0 :(得分:18)
您无法强制任务以不合作的方式中止。以不受控制的方式中止线程是不安全的,因此故意不受支持。
您应该取消Do_something_over_a_long_period_of_time
来电(即将令牌传递给他们,并定期检查他们)。
编辑:如另一个答案中所述,您可以通过确保所有前台线程都已终止来终止应用程序。但是你需要知道你的任务不一定有机会彻底终止干净。如果他们正在编写文件,你可能要等到注意到取消,以避免破坏持久状态。
答案 1 :(得分:2)
他们很想立即终止我的申请。他们不想等待长时间的行动。
默认情况下,Tasks在ThreadPool上作为后台任务运行。您可以安全地退出应用程序而无需担心后台线程。
因此,只要您想退出流程就没有问题。
请注意,Thread.Abort()很快但不安全。甚至不是戒烟申请,但它很少会导致真正的问题。