public Task RunAsync(CancellationToken cancellationToken) { return(Task.Factory.StartNew(async() => { var indexerId = _indexingSettings.IndexerId; var currentBlockNumber = _indexingSettings.From; var checkDelegate = GetCheckDelegate(cancellationToken); var lastSyncedNumber = await _indexingService.GetLastBlockForIndexerAsync(indexerId); currentBlockNumber = lastSyncedNumber.HasValue && (lastSyncedNumber.Value > currentBlockNumber) ? lastSyncedNumber.Value : currentBlockNumber; var lastProcessedBlockNumber = await IndexBlocksAsync(indexerId, currentBlockNumber, checkDelegate); await _logger.WriteInfoAsync ( "BlockIndexingJob", "RunAsync", indexerId, $"Indexing {indexerId} completed. LastProcessed - {lastProcessedBlockNumber - 1}", DateTime.UtcNow ); }, cancellationToken).Unwrap()); }