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类:作用是添加中间的管道