static Task LogWriteAsync(Configuration config, DataBuffer dataQueue, CancellationToken cancelToken) { return(Task.Run(async() => { var buffer = new byte[BUFFER_SIZE]; try { using (var binLog = config.IsBinaryLogging ? File.Open(config.BinLogPath, FileMode.Create, FileAccess.Write, FileShare.Read) : null) { while (!cancelToken.IsCancellationRequested) { var bytesRead = await dataQueue.BlockedReadAsync(buffer, 0, buffer.Length, cancelToken); if (bytesRead > 0) { await config.Logger.WriteAsync(buffer, 0, bytesRead, cancelToken); if (config.IsBinaryLogging) { await binLog.WriteAsync(buffer, 0, bytesRead, cancelToken); await binLog.FlushAsync(cancelToken); } } } } } catch (OperationCanceledException) { // Ignore cancellations } catch (Exception ex) { Console.WriteLine($"{Environment.NewLine}{Environment.NewLine}ERROR: {ex.Message}{Environment.NewLine}{Environment.NewLine}{ex}"); } })); }