Example #1
0
 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}");
         }
     }));
 }