private async Task ProcessDumpQueue(CancellationToken cancellationToken) { while (true) { // ReSharper disable once MethodSupportsCancellation var hasItem = await _dumpLock.WaitAsync(WindowMillisecondsTimeout).ConfigureAwait(false); if (!hasItem) { if (cancellationToken.IsCancellationRequested) { return; } continue; } var list = new List <ResultObject>(); var timestamp = Environment.TickCount; ResultObject item; while (Environment.TickCount - timestamp < WindowMillisecondsTimeout && list.Count < WindowMaxCount && _dumpQueue.TryDequeue(out item)) { if (list.Count > 0) { // ReSharper disable once MethodSupportsCancellation await _dumpLock.WaitAsync().ConfigureAwait(false); } list.Add(item); } if (list.Count > 0) { try { var task = _callbackChannel?.Dump(list); if (task != null) { await task.ConfigureAwait(false); } } catch { // ignored } } } // ReSharper disable once FunctionNeverReturns }