Docker下.Net Core使用ReadLine无法阻断主进程问题

 原来的写法是

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

 

posted @ 2021-12-31 17:31  代码工人有力量  阅读(199)  评论(0编辑  收藏  举报