public Erc20ContractIndexingActor( IErc20ContractIndexingService indexingService, ILog logger) { _indexingService = indexingService; _logger = logger; ReceiveAsync <Messages.Erc20ContractIndexingActor.Erc20ContractDeployedMessage>(async(message) => { var contractModel = message.DeployedContractModel; await RetryPolicy.ExecuteAsync(async() => { await _indexingService.IndexContractAsync(contractModel); }, 5, 100); await _logger.WriteInfoAsync ( nameof(Erc20ContractIndexingJob), nameof(ReceiveAsync), "Contract indexed", $"Indexed contract as address {contractModel.Address}.", DateTime.UtcNow ); }); }
public Task RunAsync(CancellationToken cancellationToken) { return(Task.Factory.StartNew(async() => { try { while (!cancellationToken.IsCancellationRequested) { var contract = await _indexingService.GetNextContractToIndexAsync(); await RetryPolicy.ExecuteAsync(async() => { await _indexingService.IndexContractAsync(contract); }, 5, 100); await _logger.WriteInfoAsync ( nameof(Erc20ContractIndexingJob), nameof(RunAsync), "Contract indexed", $"Indexed contract as address {contract.Address}.", DateTime.UtcNow ); } } catch (Exception e) { await _logger.WriteErrorAsync ( nameof(Erc20ContractIndexingJob), nameof(RunAsync), "Indexing failed", e, DateTime.UtcNow ); throw; } }, cancellationToken).Unwrap()); }