public virtual IParallelPipeline <Input, Output> CompleteRegisteration <PreviousInput>()
        {
            AbstractParallelFilter <PreviousInput, Output> lastFilter = (AbstractParallelFilter <PreviousInput, Output>)_filters.Last();

            lastFilter.TransformBlock.LinkTo(SinkBlock, new DataflowLinkOptions()
            {
                PropagateCompletion = true
            });

            return(this);
        }
 public virtual IParallelPipeline <Input, Output> Register <FIn, FOut, PreviousInput>(AbstractParallelFilter <FIn, FOut> filter)
 {
     if (_filters.Count == 0)
     {
         _filters.Add(filter);
         return(this);
     }
     else
     {
         AbstractParallelFilter <PreviousInput, FIn> lastFilter = (AbstractParallelFilter <PreviousInput, FIn>)_filters.Last();
         lastFilter.TransformBlock.LinkTo(filter.TransformBlock, new DataflowLinkOptions()
         {
             PropagateCompletion = true
         });
         _filters.Add(filter);
     }
     return(this);
 }