/// <inheritdoc/> public override async Task <BlockStoreLoopStepResult> ExecuteAsync(BlockStoreInnerStepContext context) { context.GetNextBlock(); if (await ShouldStopFindingBlocks(context)) { if (!context.DownloadStack.Any()) { return(BlockStoreLoopStepResult.Break()); } context.StopFindingBlocks(); } else { context.BlockStoreLoop.BlockPuller.AskBlock(context.NextChainedBlock); context.DownloadStack.Enqueue(context.NextChainedBlock); if (context.DownloadStack.Count == context.BlockStoreLoop.BatchDownloadSize) { context.StopFindingBlocks(); } } return(BlockStoreLoopStepResult.Next()); }
/// <inheritdoc/> public override async Task <InnerStepResult> ExecuteAsync(BlockStoreInnerStepContext context) { var batchSize = BlockStoreInnerStepContext.DownloadStackThreshold - context.DownloadStack.Count; var batchList = new List <ChainedHeader>(batchSize); while (batchList.Count < batchSize) { if (await this.ShouldStopFindingBlocksAsync(context)) { context.StopFindingBlocks(); break; } batchList.Add(context.NextChainedHeader); context.DownloadStack.Enqueue(context.NextChainedHeader); context.GetNextBlock(); } if (batchList.Any()) { this.logger.LogTrace("{0} blocks requested to be downloaded by the puller.", batchList.Count); context.BlockStoreLoop.BlockPuller.AskForMultipleBlocks(batchList.ToArray()); } return(InnerStepResult.Next); }
/// <inheritdoc/> public override async Task <InnerStepResult> ExecuteAsync(BlockStoreInnerStepContext context) { this.logger.LogTrace("()"); while (await ShouldStopFindingBlocks(context) == false) { context.DownloadStack.Enqueue(context.NextChainedBlock); context.GetNextBlock(); } context.StopFindingBlocks(); if (context.DownloadStack.Any()) { context.BlockStoreLoop.BlockPuller.AskForMultipleBlocks(context.DownloadStack.ToArray()); } this.logger.LogTrace("(-):{0}", InnerStepResult.Next); return(InnerStepResult.Next); }