В настоящее время я пытаюсь выяснить, как лучше всего запустить приложение .NET Core 2.x в качестве службы Windows, особенно для запуска конечной точки NServiceBus для системы обмена сообщениями.Мой оригинальный прототип был создан на основе некоторых документов Windows Service от Particular.Затем я взял этот функционирующий прототип и превратил его в стандартную библиотеку .NET, из которой могли бы работать другие члены команды, но обнаружил, что он не слишком интуитивен для них (или для меня самого, если я отвлекся от него на 2 недели).
Естественно, после того, как я создал работающий прототип и он был развернут в производство, я нашел более элегантное решение, использующее .NET Core GenericHostBuilder
, любезно предоставленное Mr.Стив Гордон .Большая часть кода имеет смысл для меня, но я зациклен на new Thread(...).Start();
, вероятно потому, что у меня нет особого опыта использования Thread
в C # и .NET.
new
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * '*' s '', что не имеет никакого отношения к нему, кажется действительно неправильным.Я обеспокоен тем, что это может привести к утечке памяти, или сборщик мусора его подберет?Я нашел этот ТАК ответ, который дает мне некоторое заверение, что даже если у меня нет ссылки на Thread
, CLR найдет.Так что, похоже, не должно быть никакого беспокойства о том, что GC завершит поток, верно? - Может кто-нибудь объяснить мне, почему
Abort()
не вызывается для Thread
?Это потому, что CLR управляет потоками и знает, как остановить другие потоки, когда основной поток завершает работу?Или это как-то связано с вызовом метода ServiceBase.Stop()
в методе IHostLifetime.StopAsync()
?
Если эти вещи можно объяснить где-нибудь в документации по Thread
, я большечем рад получить "RTFM" и найти документы.Я просто не нашел ничего, что дало бы мне ясное объяснение на данный момент.