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); }
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); }
public DataBrancher(BlockContainerOptions containerOptions) : this(null, containerOptions) { }
public static BlockContainer <TIn, TOut> FromBlock <TIn, TOut>(IPropagatorBlock <TIn, TOut> block, BlockContainerOptions options) { return(new PropagatorBlockContainer <TIn, TOut>(block, options)); }
public static BlockContainer <TIn> FromBlock <TIn>(ITargetBlock <TIn> block, BlockContainerOptions options) { return(new TargetBlockContainer <TIn>(block, options)); }
public TargetBlockContainer(ITargetBlock <TIn> block, BlockContainerOptions containerOptions) : base(containerOptions) { m_block = block; RegisterChild(m_block); }