public async Task StartAsync(CancellationToken cancellationToken = default) { _logger.LogInformation($"Log folder: {_logFolder}"); if (_loadArchive) { _logger.LogWarning($"\"Load archive\" mode enabled"); } _logger.LogInformation($"Portion per request: {_portion}"); InitializeDataflow(cancellationToken); try { var settings = await GetReaderSettingsAsync(cancellationToken); _eventLogReader = new EventLogReader <T>(settings); while (!cancellationToken.IsCancellationRequested) { bool forceSending = false; T item = default; try { item = _eventLogReader.ReadNextEventLogItem(cancellationToken); } catch (EventLogReaderTimeoutException) { forceSending = true; } catch (Exception ex) { _batchBlock.Complete(); throw ex; } if (item != null) { await SendAsync(_batchBlock, item); if (!string.IsNullOrEmpty(_eventLogReader.LgpFileName) && _currentLgpFile != _eventLogReader.LgpFileName) { _logger.LogInformation($"Reader started reading {_eventLogReader.LgpFileName}"); _currentLgpFile = _eventLogReader.LgpFileName; } } else if (!settings.LiveMode) { forceSending = true; } if (forceSending) { _batchBlock.TriggerBatch(); } } } catch (TaskCanceledException) { } catch (Exception ex) { throw ex; } }