protected override void FlushAsync(AsyncContinuation asyncContinuation) { if (!insightAsync.FlushQueue(TimeSpan.FromMilliseconds(50))) { System.Threading.Tasks.Task.Factory.StartNew(() => { for (int i = 0; i < 3; ++i) { InternalLogger.Trace("Waiting for AsyncLogger queue flush"); if (insightAsync.FlushQueue(TimeSpan.FromSeconds(5))) { InternalLogger.Trace("Completed AsyncLogger queue flush"); asyncContinuation(null); return; } } InternalLogger.Warn("Timeout while waiting for AsyncLogger queue flush"); asyncContinuation(new TimeoutException("AsyncLogger queues are not empty")); }, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default); } else { asyncContinuation(null); } }