private async Task StartDequeue()

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);
        }