static TimeSpan LoopWhileNoConnection(DateTime disconnectionStartTime, ICMConfiguration conf)
            {
                var      disconnected          = true;
                TimeSpan durationDisconnection = TimeSpan.Zero;

                while (disconnected)
                {
                    var nowDisconnected = DateTime.Now.ToLocalTime();
                    durationDisconnection = nowDisconnected - disconnectionStartTime;

                    var pingsResults = ICM.pingServers(conf.servers);
                    disconnected = !pingsResults.AtLeastOneServerReachable;

                    OutputNoConnection(nowDisconnected, durationDisconnection, conf);

                    LetWaitFewSeconds(conf);
                }

                return(durationDisconnection);
            }
        public static Task Main(string[] args)
        {
            ICM.pingServersResult pingsResults;
            ICMConfiguration      conf = LoadConfiguration(args);

            while (true)
            {
                var now = DateTime.Now.ToLocalTime();
                pingsResults = ICM.pingServers(conf.servers);
                if (pingsResults.AtLeastOneServerReachable)
                {
                    OutputOkPingsResults(pingsResults, now, conf);
                }
                else
                {
                    var disconnectionDuration = LoopWhileNoConnection(now, conf);
                    OutputReconnection(now, disconnectionDuration, conf);
                }

                LetWaitFewSeconds(conf);
            }