C# 关于PipeLine管道的用法

时间:2021-11-08 19:18:44

pipeline类似于工厂加工,开始给一堆的零件,通过各个管道之后,,从最后出口出来之后就是一件成品。管道链类似的责任。的主要区别是,链,每个“链接”传递到下一个,直到人知道如何处理它,那么这个过程停止。在管道,传递给每一个链的链接和潜在的修改通过。这就是“管道和过滤器”发挥作用,因为一个链接可以过滤管可能会增加其他链接。

代码如下:

中间过程的接口:

C# 关于PipeLine管道的用法

一个上下文的结构:知道自己的上一个和下一个管道

public class HandlerContext
    {
        private IEventHandler _handler;

        protected HandlerContext()
            : this(null)
        {
        }

        public HandlerContext(IEventHandler handler)
        {
            _handler = handler;
            Next =null;
            Prev = null;
        }

        public virtual IEventHandler Handler
        {
            get { return _handler; }
        }

        public static Task<object> Invoke(HandlerContext ctx, object data, TaskCompletionSource<Object> tcs = null)
        {
            var promise = tcs ?? new TaskCompletionSource<object>();
            if (ctx != null)
            {
                ctx.Handler.Process(ctx, data, promise);
            }
            return promise.Task;
        }

        public Task<object> FireProcess(object data)
        {
            var next = this.Next;
            return Invoke(next, data);
        }

        public Task<object> FireProcess(object data, TaskCompletionSource<Object> tcs)
        {
            var next = this.Next;
            return Invoke(next, data, tcs);
        }

        internal HandlerContext Next;
        internal HandlerContext Prev;
    }

PipeLine类:作用是添加中间的管道