public async Task ProcessAsync()
        {
            if (!_isInited)
            {
                await InitAsync();
            }

            List <string> blobs;

            if (_allBlobsReprocessingRequired)
            {
                _log.WriteInfo("BlobProcessor.ProcessAsync", _instanceTag, $"All blobs will be reprocessed");
                blobs = await _blobReader.GetBlobsForConversionAsync(null);

                _allBlobsReprocessingRequired = false;
            }
            else
            {
                string lastBlob;
                if (!string.IsNullOrWhiteSpace(_lastBlob))
                {
                    lastBlob  = _lastBlob;
                    _lastBlob = null;
                }
                else
                {
                    lastBlob = await _blobSaver.GetLastSavedBlobAsync();
                }
                blobs = await _blobReader.GetBlobsForConversionAsync(lastBlob);
            }

            foreach (var blob in blobs)
            {
                try
                {
                    _log.WriteInfo("BlobProcessor.ProcessAsync", _instanceTag, $"Processing {blob}");

                    _blobSaver.StartBlobProcessing();
                    _messageConverter.StartBlobProcessing((directory, messages) => _blobSaver.SaveToBlobAsync(messages, directory, blob));

                    await _blobReader.ReadAndProcessBlobAsync(blob);

                    await _messageConverter.FinishBlobProcessingAsync();

                    await _blobSaver.FinishBlobProcessingAsync(blob);

                    _log.WriteInfo("BlobProcessor.ProcessAsync", _instanceTag, $"Processed {blob}");
                }
                catch (Exception ex)
                {
                    _log.WriteError("BlobProcessor.ProcessAsync", string.IsNullOrWhiteSpace(_instanceTag) ? blob : $"{_instanceTag}:{blob}", ex);
                    throw;
                }
            }
            if (blobs.Count > 0)
            {
                _log.WriteInfo("BlobProcessor.ProcessAsync", _instanceTag, $"Processed {blobs.Count} blobs");
            }
        }