原来的写法是
Console.ReadLine();
使用等待屏幕输入来阻断主线程的运行,而不输入就一直等待,也就完成了进程的存活。
但是现在Docker环境下,这样做无法阻止了,写法失效了。
下边是找到的资料,已经试过可用。
https://www.cnblogs.com/hgjmagic/p/13915535.html
新写法整理:
class Program { //定义线程事件对象 static readonly AutoResetEvent _closingEvent = new AutoResetEvent(false); static void Main(string[] args) { //服务启动 Console.WriteLine("服务启动"); //健康检查 Wa.Operation.Health.Check(true, true); ///////////////////////////////////////// //业务代码写这里 ///////////////////////////////////////// //原来的阻断方式,可以保留 System.Console.ReadLine(); //定义事件,Docker下运行时阻断主进程 Console.CancelKeyPress += ((s, a) => { Console.WriteLine("服务退出"); _closingEvent.Set(); }); _closingEvent.WaitOne(); } }
看注释改代码,清楚易懂。
要看原理的可以试完可用后,再去查类库,其实就是声明线程等待,以前是用的ReadLine的特性来做的而已。
88