.NET框架中的线程生命周期是怎么样的?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (22)

这个链接中解释了.NET框架中的线程状态。

我最近在一个网站上看到了这张照片,我想起了一些问题:

  1. OS中的线程生命周期并不完全与.NET框架中的线程生命周期一致。有人可以提供与.NET框架中的操作系统状态相匹配的资源吗?
  2. 我们在.NET框架中没有一个叫做Blocked的状态。如果发出I / O请求,线程的状态是什么?
  3. 中止状态的目的是什么?当一个线程调用该Abort()方法时,它将进入AbortRequested状态,在线程响应中止请求后,它将进入停止状态。那么中止状态的功能是什么?
提问于
用户回答回答于

我不相信这种映射会像你希望的那样有用。我从来没有遇到过,也从来不需要它。

除非你正在尝试编写类似于死锁检测器(相当先进)的东西,否则并不需要“阻塞”状态。从典型的开发人员角度来看,操作系统“阻塞”状态是暂时的,可以忽略。(看起来代码正在运行,但是在收到异步响应之前,操作系统无关紧要。)

想象一下,Aborted状态为.NET,为线程中的所有代码提供了一个异常处理程序。当捕获异常导致线程死亡时,.NET会将它转换为Aborted状态。否则,可能无法区分异常和正常线程终止之间的区别。

用户回答回答于

如果一个线程的执行被其中一个同步原语暂停,如锁或互斥锁,则线程被阻塞。根据定义,任何在给定时刻执行有用工作的线程都不会在此刻被阻止。

AbortRequested/Stopped周期提供了线程执行有序关机,释放获取的资源并执行其他清理任务的机会。

http://www.albahari.com/threading/

扫码关注云+社区