Exemplo n.º 1
0
        public DataBrancher(Func <T, T> copyFunc, BlockContainerOptions containerOptions) : base(containerOptions)
        {
            m_copyBuffer = new BufferBlock <T>(new DataflowBlockOptions()
            {
                BoundedCapacity = containerOptions.RecommendedCapacity ?? int.MaxValue
            });

            m_transformBlock = new TransformBlock <T, T>(arg =>
            {
                m_copyBuffer.SafePost(copyFunc == null ? arg : copyFunc(arg));
                return(arg);
            });

            m_transformBlock.Completion.ContinueWith(t =>
            {
                //propagate completion only the task succeeded (RegisterBlock already takes care of Faulted and Canceled)
                if (t.Status == TaskStatus.RanToCompletion)
                {
                    m_copyBuffer.Complete();
                }
            });

            RegisterChild(m_copyBuffer);
            RegisterChild(m_transformBlock);
        }
Exemplo n.º 2
0
        public BlockContainer(BlockContainerOptions containerOptions)
        {
            m_containerOptions  = containerOptions;
            m_defaultLinkOption = new DataflowLinkOptions()
            {
                PropagateCompletion = true
            };
            m_completionTask = new Lazy <Task>(GetCompletionTask, LazyThreadSafetyMode.ExecutionAndPublication);

            string friendlyName = Utils.GetFriendlyName(this.GetType());
            int    count        = s_nameDict.GetOrAdd(friendlyName, new IntHolder()).Increment();

            m_defaultName = friendlyName + count;

            if (m_containerOptions.ContainerMonitorEnabled || m_containerOptions.BlockMonitorEnabled)
            {
                StartPerformanceMonitorAsync();
            }
        }
 public PropagatorBlockContainer(IPropagatorBlock <TIn, TOut> block, BlockContainerOptions containerOptions)
     : base(containerOptions)
 {
     m_block = block;
     RegisterChild(m_block, null);
 }
Exemplo n.º 4
0
 public DataBrancher(BlockContainerOptions containerOptions) : this(null, containerOptions)
 {
 }
Exemplo n.º 5
0
 public static BlockContainer <TIn, TOut> FromBlock <TIn, TOut>(IPropagatorBlock <TIn, TOut> block, BlockContainerOptions options)
 {
     return(new PropagatorBlockContainer <TIn, TOut>(block, options));
 }
Exemplo n.º 6
0
 public static BlockContainer <TIn> FromBlock <TIn>(ITargetBlock <TIn> block, BlockContainerOptions options)
 {
     return(new TargetBlockContainer <TIn>(block, options));
 }
Exemplo n.º 7
0
 public TargetBlockContainer(ITargetBlock <TIn> block, BlockContainerOptions containerOptions)
     : base(containerOptions)
 {
     m_block = block;
     RegisterChild(m_block);
 }