示例#1
0
        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)
            }));
        }
示例#2
0
        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) });
        }
示例#3
0
        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) });
        }