using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Logging; namespace StellaOps.Provcache; public sealed partial class WriteBehindQueue { private async Task DrainAsync(CancellationToken cancellationToken) { var batch = new List(); while (_channel.Reader.TryRead(out var item)) { batch.Add(item); Interlocked.Decrement(ref _currentQueueDepth); if (batch.Count >= _options.WriteBehindBatchSize) { await ProcessBatchAsync(batch, cancellationToken).ConfigureAwait(false); batch.Clear(); } } if (batch.Count > 0) { await ProcessBatchAsync(batch, cancellationToken).ConfigureAwait(false); } _logger.LogInformation("Write-behind queue drained"); } }