Пример #1
0
        private void Stop_1()
        {
            Console.WriteLine("stop try get lock");

            lock (_lock)
            {
                Console.WriteLine("stop get lock");

                // Stop이 락을 먼저 잡았으니 loop가 락을 대기한다.
                // Stop을 잘못 구현해서 loop를 대기하게 되면 loop는 Stop의 락이 풀리기를 기다리므로 데드락이 발생한다.
                _naiveLoopThread.Stop();
            }

            Console.WriteLine("stop release lock");
        }
Пример #2
0
        public Boolean CleanupAndWaitForAsyncSend(Int32 waitMS)
        {
            _thread?.Stop();

            while (_reportActions.IsEmpty() == false)
            {
                SendReportInQueue();
            }

            _thread        = null;
            _reportActions = null;

            return(_slackWebhook.WaitForAsyncSend(waitMS));
        }
Пример #3
0
        internal void Stop()
        {
            lock (_lock)
            {
                if (_thread == null)
                {
                    throw new LoggerException($"Fail {nameof(ThroughputController)}::{nameof(Stop)}");
                }

                _thread.Stop();
                _thread = null;

                Flush();
            }
        }
Пример #4
0
        internal void Stop()
        {
            lock (_lock)
            {
                if (_mainThread == null || _recordLogQueueThread == null)
                {
                    throw new LoggerException($"Fail {nameof(Watcher)}::{nameof(Stop)}");
                }

                _mainThread.Stop();
                _recordLogQueueThread.Stop();

                _mainThread           = null;
                _recordLogQueueThread = null;
            }
        }
Пример #5
0
        internal void Stop()
        {
            lock (_lock)
            {
                if (_thread == null)
                {
                    throw new LoggerException($"Fail {nameof(CompletePutNotifier)}::{nameof(Stop)}");
                }

                _thread.Stop();
                _thread = null;
            }

            // Stop이후에 미묘한 타이밍에 Push된 것은 손실될 수 있음을 감안한다.
            while (_completePuts.IsEmpty() == false)
            {
                PopAndNotice();
            }
        }