【发布时间】:2014-11-21 08:06:06
【问题描述】:
我已经阅读了很多我应该远离 Thread.Abort 的地方。并以艰难的方式了解到这是真的(它似乎在 Mono 上具有相当依赖平台的行为):))
那么从外部终止线程的好/优雅的方法是什么?
我知道我可以添加这样的代码:
if (terminateRequested) return;
或更好
if (terminateRequested) throw new MyTerminateThreadException();
但在现实世界中线程代码分布在多个 C# 文件中的情况下,它很快就会变成一种烦人的重复模式。
如果线程处于睡眠状态、等待服务器连接、互斥锁或执行不属于我的代码的情况如何?你如何处理这些?
【问题讨论】:
-
stackoverflow.com/questions/3632149/… - 可能有帮助吗?
-
有太多不同的场景无法在短时间内正确回答这个问题。这真的取决于每个特定的场景。也就是说,除非使用
Thread.Abort()(我同意这是一种很糟糕的中断线程的方式),否则如果您想中断一个正在运行的线程,您几乎只能在某处检查某些状态。 -
Mono 是否有可用的
Task类?如果是这样,您可以使用CancellationToken来中断线程。
标签: c# multithreading terminate abort