private static TransformManyBlock <Tuple <TxOutputKey, CompletionCount, DecodedBlockTx>, DecodedBlockTx> InitWarmupUtxo(IDeferredChainStateCursor deferredChainStateCursor, CancellationToken cancelToken) { return(new TransformManyBlock <Tuple <TxOutputKey, CompletionCount, DecodedBlockTx>, DecodedBlockTx>( tuple => { var txOutputKey = tuple.Item1; var completionCount = tuple.Item2; var blockTx = tuple.Item3; if (txOutputKey.TxOutputIndex == uint.MaxValue) { deferredChainStateCursor.WarmUnspentTx(txOutputKey.TxHash); } else { deferredChainStateCursor.WarmUnspentTxOutput(txOutputKey); } if (completionCount.TryComplete()) { return new[] { blockTx } } ; else { return new DecodedBlockTx[0]; } }, new ExecutionDataflowBlockOptions { CancellationToken = cancelToken, MaxDegreeOfParallelism = Math.Min(Environment.ProcessorCount, deferredChainStateCursor.CursorCount) })); }
private static TransformManyBlock<Tuple<UInt256, CompletionCount, BlockTx>, BlockTx> InitWarmupUtxo(IDeferredChainStateCursor deferredChainStateCursor, CancellationToken cancelToken) { return new TransformManyBlock<Tuple<UInt256, CompletionCount, BlockTx>, BlockTx>( tuple => { var txHash = tuple.Item1; var completionCount = tuple.Item2; var blockTx = tuple.Item3; deferredChainStateCursor.WarmUnspentTx(txHash); if (completionCount.TryComplete()) return new[] { blockTx }; else return new BlockTx[0]; }, new ExecutionDataflowBlockOptions { CancellationToken = cancelToken, MaxDegreeOfParallelism = Math.Min(Environment.ProcessorCount, deferredChainStateCursor.CursorCount) }); }
private static TransformManyBlock<Tuple<TxOutputKey, CompletionCount, DecodedBlockTx>, DecodedBlockTx> InitWarmupUtxo(IDeferredChainStateCursor deferredChainStateCursor, CancellationToken cancelToken) { return new TransformManyBlock<Tuple<TxOutputKey, CompletionCount, DecodedBlockTx>, DecodedBlockTx>( tuple => { var txOutputKey = tuple.Item1; var completionCount = tuple.Item2; var blockTx = tuple.Item3; if (txOutputKey.TxOutputIndex == uint.MaxValue) deferredChainStateCursor.WarmUnspentTx(txOutputKey.TxHash); else deferredChainStateCursor.WarmUnspentTxOutput(txOutputKey); if (completionCount.TryComplete()) return new[] { blockTx }; else return new DecodedBlockTx[0]; }, new ExecutionDataflowBlockOptions { CancellationToken = cancelToken, MaxDegreeOfParallelism = Math.Min(Environment.ProcessorCount, deferredChainStateCursor.CursorCount) }); }