/// <summary> /// 创建一个流程配置,并注册到管道事件 /// </summary> /// <param name="process"></param> /// <param name="callback"></param> public void SetProcess(ProcessConfigureBase process, ProcessConfigureBase callback = null) { process.Key = Guid.NewGuid().ToString(); Processes.Enqueue(process); var thiscallback = new ConcurrentStack <ProcessConfigureBase>(); if (CallbackList.TryGetValue(lastProcessesKey, out ConcurrentStack <ProcessConfigureBase> lastcallback)) { foreach (var item in lastcallback) { thiscallback.Push(item); } } lastProcessesKey = process.Key; if (callback != null) { thiscallback.Push(callback); } CallbackList.TryAdd(lastProcessesKey, thiscallback); }
public EventProcessManagerPipline(ILogger logger, EventProcessManagerPipline pipline) { this.logger = logger; this.Key = pipline.Key; this.Processes = new ConcurrentQueue <ProcessConfigureBase>(); foreach (var item in pipline.GetProcessee()) { Processes.Enqueue(item); } ; this.CallbackList = new ConcurrentDictionary <string, ConcurrentStack <ProcessConfigureBase> >(); foreach (var item in pipline.GetCallbackList()) { var callbacklist = new List <ProcessConfigureBase>(); var callbackstack = new ConcurrentStack <ProcessConfigureBase>(); foreach (var child in item.Value) { callbacklist.Add(child); } callbacklist.Reverse();//由于是从栈复制到栈,所以这里需要进行一次反转 callbacklist.ForEach(x => callbackstack.Push(x)); CallbackList.TryAdd(item.Key, callbackstack); } }