This commit is contained in:
Jeroen Saey
2026-01-28 10:35:18 +01:00
parent 155fceeb71
commit 6d8fe8e003
2 changed files with 45 additions and 39 deletions

View File

@@ -13,8 +13,8 @@
<Copyright>EonaCat (Jeroen Saey)</Copyright> <Copyright>EonaCat (Jeroen Saey)</Copyright>
<PackageTags>EonaCat;Logger;EonaCatLogger;Log;Writer;Jeroen;Saey</PackageTags> <PackageTags>EonaCat;Logger;EonaCatLogger;Log;Writer;Jeroen;Saey</PackageTags>
<PackageIconUrl /> <PackageIconUrl />
<Version>1.5.6</Version> <Version>1.5.7</Version>
<FileVersion>1.5.6</FileVersion> <FileVersion>1.5.7</FileVersion>
<PackageReadmeFile>README.md</PackageReadmeFile> <PackageReadmeFile>README.md</PackageReadmeFile>
<GenerateDocumentationFile>True</GenerateDocumentationFile> <GenerateDocumentationFile>True</GenerateDocumentationFile>
<PackageLicenseFile>LICENSE</PackageLicenseFile> <PackageLicenseFile>LICENSE</PackageLicenseFile>

View File

@@ -70,18 +70,21 @@ public abstract class BatchingLoggerProvider : ILoggerProvider, IDisposable
set => _loggerSettings = value; set => _loggerSettings = value;
} }
private SemaphoreSlim _writeSemaphore = new SemaphoreSlim(1, 1);
public bool IsStarted { get; set; } public bool IsStarted { get; set; }
public bool UseMask { get; set; } public bool UseMask { get; set; }
public void Dispose() public async void Dispose()
{ {
while (!_messageQueue.IsEmpty) while (!_messageQueue.IsEmpty)
{ {
Task.Delay(10); // Do nothing, just wait for the queue to be empty
await Task.Delay(1000);
} }
_isDisposing = true; _isDisposing = true;
StopAsync().GetAwaiter().GetResult(); await StopAsync().ConfigureAwait(false);
GC.SuppressFinalize(this); GC.SuppressFinalize(this);
} }
@@ -112,20 +115,23 @@ public abstract class BatchingLoggerProvider : ILoggerProvider, IDisposable
return; return;
} }
lock (_writeLock) await _writeSemaphore.WaitAsync();
{ await WriteMessagesAsync(_currentBatch, _cancellationTokenSource.Token).ConfigureAwait(false);
WriteMessagesAsync(_currentBatch, _cancellationTokenSource.Token).ConfigureAwait(false);
_currentBatch.Clear(); _currentBatch.Clear();
} }
}
catch catch
{ {
// ignored // ignored
} }
} finally
Thread.Sleep(10); {
_writeSemaphore.Release();
} }
} }
await Task.Delay(500);
}
}
protected async Task WriteStartMessage() protected async Task WriteStartMessage()
{ {