Jea*_*uis 9 c# multithreading task task-parallel-library
假设,有一项任务包含以下约:
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();
Run Code Online (Sandbox Code Playgroud)
并且有非常不耐烦的用户.他们渴望立即终止我的申请.他们不想等待长时间的行动.
我以前使用Thread该类,并能够通过调用Abort()命令立即中止我的所有线程.
我如何立即中止我的任务?
谢谢.
Jon*_*eet 18
您不能强制任务以不合作的方式中止.以不受控制的方式中止线程是不安全的,因此故意不受支持.
你应该Do_something_over_a_long_period_of_time取消你的呼叫取消(即传递令牌,并定期检查它们).
编辑:如另一个答案中所述,您可以通过确保所有前台线程都已终止来终止应用程序.但是你需要意识到你的任务不一定有机会彻底终止.如果他们正在编写文件,您可能希望等到注意到取消,以避免破坏持久状态.
他们渴望立即终止我的申请。他们不想在长时间的行动进行时等待。
默认情况下,任务作为后台任务在线程池上运行。您可以安全地退出应用程序,而无需担心后台线程。
所以只要你想退出你的进程就没有问题。
请注意,Thread.Abort() 速度很快,但不安全。即使对于退出应用程序也不会,但它很少会导致真正的问题。
| 归档时间: |
|
| 查看次数: |
10209 次 |
| 最近记录: |