private void SendReportInQueue()
 {
     // 큐를 비울 때까지 연속으로 보내면, Sync라 할지라도 순서가 뒤바뀔 가능성이 높아서 하나씩 보낸다.
     // 초당 1000/THREAD_INTERVAL_MS 개의 제한이 생긴다.
     if (_reportActions?.IsEmpty() == false)
     {
         _reportActions?.Pop()();
     }
 }
Exemple #2
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();
            }
        }
        public Boolean CleanupAndWaitForAsyncSend(Int32 waitMS)
        {
            _thread?.Stop();

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

            _thread        = null;
            _reportActions = null;

            return(_slackWebhook.WaitForAsyncSend(waitMS));
        }