35 lines
924 B
C#
35 lines
924 B
C#
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<WriteBehindItem>();
|
|
|
|
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");
|
|
}
|
|
}
|