private async Task WriteBuffer(string message, bool flush) {
await _semaphore.WaitAsync();
try {
_sb.Append(message);
if (_sb.Length > _maxBufferSize || flush) {
using (var stream = File.AppendText(_filePath)) {
await stream.WriteAsync(_sb.ToString());
}
_sb.Clear();
}
} finally {
_semaphore.Release();
}
}