代码之家  ›  专栏  ›  技术社区  ›  willwolfram18

.NET线程和垃圾收集/虚拟进程

  •  2
  • willwolfram18  · 技术社区  · 7 年前

    我目前正在研究如何最好地将.NETCore2.x应用程序作为Windows服务运行,特别是为消息传递系统运行NServiceBus端点。我最初的原型是用一些 Windows Service hosting docs 从特定的角度。然后,我把这个运行正常的原型变成了一个.NET标准库,供其他团队成员使用,但我发现对他们(或者我自己,如果我离开它两周的话)来说,这并不是非常直观的。

    GenericHostBuilder ,由 Mr. Steve Gordon new Thread(...).Start(); Thread 在C和.NET中。

    1. new 线程 而保持不提及它感觉真的是错误的。我担心这样做可能会导致内存泄漏,或者垃圾收集器会把它捡起来?我确实找到了 this 所以这个答案给了我一些安慰,即使我没有提到 ,CLR将。所以听起来不应该担心GC完成线程,对吧?
    2. 有人能解释一下原因吗 Abort() 不需要 线程 ? 是因为CLR管理线程,并且知道在主线程关闭时停止其他线程吗?还是跟打电话给警察有关 ServiceBase.Stop() 中的方法 IHostLifetime.StopAsync()

    如果这些事情可以在 在某个地方,我很高兴得到一个“实时调频”和找到文件。在这一点上,我只是没有找到任何能给我一个明确解释的东西。

    1 回复  |  直到 7 年前
        1
  •  5
  •   TheGeneral    7 年前

    当线程执行完成并超出作用域时,垃圾收集器最终将回收资源(如果需要的话)。 Thread IDisposable

    关于 Thread.Abort Thread.Interrupt 线程。中止 方法—您应该利用同步对象(如WaitHandles或Semaphores、ect、ect)并对正在使用的线程执行优雅的终止。

    words of Eric Lippert

    线程。中止 充其量只能说明设计不好,可能 不可靠,极其危险。完全应该避免 成本;唯一一次你甚至应该考虑中止一个线程 在某种“紧急关闭”代码中 尽可能干净利落地拆除appdomain。

    一些附加读物