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