正在中止c#线程

本文关键字:线程 | 更新日期: 2023-09-27 17:57:54

我刚刚开始研究在我创建的程序中使用的线程。我有几个问题,我想我知道答案,但可以澄清一下。

一旦创建了一个线程,它是否一直处于活动状态/活动状态/存在(不确定正确的描述),直到中止?

当线程被中止/停止时,它只会通过抛出错误来中止?

如果以上(中止抛出错误)是真的,那么如何将其合并到现有的try/catch中,而不在每次线程结束时运行现有的catch命令?

正如我所说,我才刚刚开始学习线程,所以如果这个问题有点太"Noob",请原谅。我发现了很多信息,但我得到的信息越多,我的问题就越多。

感谢

正在中止c#线程

一旦创建了一个线程,它是否总是活着/活着/在那里(不确定正确描述)直到中止?

否,它将一直有效,直到方法块的执行未完成。一旦执行完成,它就不再是实时的。

若它是一个非线程池线程,那个么它就结束了,变得不可用了,但若它是线程池线程的话,那个么就去并放回池中。这样,它就可以在任何时候被分配一个新的请求

当线程被中止/停止时,它只会通过抛出错误

是的,它会抛出一个ThreadAbortException,但为什么要中止呢?

如果您想取消它,请尝试使用BackGroundWorkerSystem.Threading.Tasks.Task。请参阅任务取消

要澄清。。。

任何线程可能都应该"运行到停止本身。"也就是说,直到它正常终止。如果你希望它更快地停止,我建议你应该以某种合适的方式向它发出信号"停止它正在做的事情,并尽快退出。"

(将线程或进程视为工作者也很有用,它可能在其生命周期内完成许多工作单元。与让它长寿命和高效生活相比,设置和拆除这样的东西是昂贵的…)

把枪对准一个过程或线程的头部,然后扣动扳机从来都不是一个好主意,因为当致命的子弹到达时,你无法知道它可能"正在做什么"。任何事情都可能发生,你永远无法复制它。

是的,"未捕获的异常"会导致线程或进程死亡。。。而且,特别是在线程(它与同伴共享内存和其他一切)的情况下,这可能是更严重的应用程序错误的预兆,而这些错误是你无法轻易检测到的。因此,我建议您应该始终在任何线程或进程的最外层处理程序中使用错误捕获机制。允许线程捕获并(尝试)报告之前的错误:"它尽可能优雅地终止本身。"