【问题标题】:Good way to terminate a thread (without Thread.Abort) [duplicate]终止线程的好方法(没有Thread.Abort)[重复]
【发布时间】: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


【解决方案1】:

我相信 Mono 有 Task class available。我建议使用CancellationToken 浏览。查看此Task Cancellation 页面,了解执行和取消线程的更好方法。

【讨论】:

    猜你喜欢
    • 2011-01-16
    • 2011-05-20
    • 1970-01-01
    • 2011-07-11
    • 2021-12-17
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多