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;
            }
        }