in src/Libs/Common/BlobLoggerProvider.cs [63:106]
private async Task StartDequeue()
{
const int FlushSize = 16 * 1024;
while (true)
{
if (_queue.TryDequeue(out var item))
{
if (!await EnsureBlobSafeAsync(item.EventTime))
{
await Task.Delay(1);
continue;
}
using var ms = new MemoryStream();
using (var sw = new StreamWriter(ms, Utf8WithoutBom, 4096, true))
{
while (true)
{
sw.WriteLine(JsonConvert.SerializeObject(item));
if (ms.Length >= FlushSize)
{
break;
}
item = await TryTakeAsync();
if (item == null)
{
break;
}
}
}
ms.Seek(0, SeekOrigin.Begin);
await WriteBlobAsync(ms);
continue;
}
else
{
if (_isStopping)
{
break;
}
await Task.Delay(1);
}
}
_stopped.TrySetResult(true);
}