Пример #1
0
        public override void AddBatcher <T>(Guid parentId, FlowBatcherDefinition <T> definition, FlowLinkDefinition <T> link)
        {
            if (!_blockContainer.TryGetSourceBlock(parentId, out SourceBlockBase <T> parentBlock))
            {
                throw new Exception($"Cannot link block {definition.BlockInfo.Name} with id {definition.BlockInfo.Id} to parent block. " +
                                    "Parent block not found.");
            }

            if (!_blockContainer.TryGetBlock(definition.BlockInfo.Id, out BatcherBlock <T> batcher))
            {
                BlockHeader         header   = new BlockHeader(definition.BlockInfo, Definition.ServiceInfo);
                FlowBatcherSettings settings = (FlowBatcherSettings)definition.Settings;

                definition.Settings.Type       = _flowType;
                definition.Settings.Iterations = _iterations;

                LinkRouterBase <List <T> > router   = GetLinkFromProducerType <List <T> >(settings.ProducerType);
                IBlockLinkReceiver <T>     receiver = link.LinkFactory.CreateReceiver(link);

                batcher = new BatcherBlock <T>(header, receiver, router, definition);

                AssignLoggers(batcher);
                _blockContainer.AddBlock(batcher);
            }

            Link(parentBlock, batcher, link);
        }
Пример #2
0
        public BatcherBlock(BlockHeader header, IBlockLinkReceiver <T> receiver,
                            LinkRouterBase <List <T> > router, FlowBatcherDefinition <T> definition) : base(header, definition.Settings, router)
        {
            Receiver = receiver;

            FlowBatcherSettings settings = (FlowBatcherSettings)definition.Settings;

            _maxBatchSize    = settings.MaxBatchSize;
            _maxBatchTimeout = settings.MaxBatchTimeout;

            _batch    = new List <T>();
            _syncRoot = new object();
            _toggled  = false;
        }
Пример #3
0
 public abstract void AddBatcher <T>(Guid parentId, FlowBatcherDefinition <T> definition, FlowLinkDefinition <T> link);