【发布时间】:2018-09-21 03:39:35
【问题描述】:
我目前正在尝试找出如何最好地将 .NET Core 2.x 应用程序作为 Windows 服务运行,特别是为消息传递系统运行 NServiceBus 端点。我最初的原型是由 Particular 的一些Windows Service hosting docs 构建的。然后,我把这个功能原型变成了一个 .NET Standard 库,供其他团队成员构建,但发现它对他们(或者如果我离开它 2 周,对我自己来说)不是超级直观。
自然地,在我构建了一个可运行的原型并将其部署到生产环境后,我发现了一个更优雅的解决方案,它使用了 .NET Core 的GenericHostBuilder,由Mr. Steve Gordon 提供。大部分代码对我来说是有意义的,但我挂断了new Thread(...).Start();,可能是因为我没有在 C# 和 .NET 中使用 Thread 的任何具体经验。
-
new@Thread并保持不提及它感觉真的不对。我担心这样做可能会导致内存泄漏或垃圾收集器会捡起它?我确实找到了this SO 答案,这让我放心,即使我没有引用Thread,CLR 也会。所以听起来应该不用担心 GC 会终结线程,对吧? - 谁能向我解释为什么
Abort()不被称为Thread?是不是因为 CLR 管理线程,知道在主线程关闭时停止其他线程?还是和IHostLifetime.StopAsync()方法中调用ServiceBase.Stop()方法有关系?
如果可以在某处的 Thread 的一些文档中解释这些事情,我很高兴获得“RTFM”并找到这些文档。在这一点上,我只是没有找到任何可以给我明确解释的东西。
【问题讨论】:
-
正确编写多线程 C# 程序极其困难,您甚至连最基本的内容都不懂。 寻找专家来帮助您。你会弄错,更糟糕的是,它会以微妙的方式出错,不会出现在测试中,但会出现在生产中。
-
我向您保证,我了解多线程编程的基础知识,并且了解多线程程序可能会导致难以检测的错误(我已经编写了一些多线程的东西,并且我自己也看到过)。但是你说得对,我还没有使用 C# 进行多线程。
-
更好的是,与其告诉我“寻找专家”,不如给我指出一些要阅读的文档或材料,以便我可以学习和成长?也许我没有可用的 C# 多线程“专家”?
-
要求场外教程是本网站的明确主题。也就是说,C# in a Nutshell 中的线程章节非常好。我是最近一期的编辑。
标签: c# multithreading .net-core windows-services nservicebus