/// <summary> /// Add first stage to this pipeline /// </summary> /// <typeparam name="TSource">Input type</typeparam> /// <typeparam name="TResult">Result type</typeparam> /// <param name="source">Source collection</param> /// <param name="workers">Number of Workers</param> /// <param name="queueSize">Size of result buffer</param> /// <param name="filter"></param> /// <param name="onFinish"></param> /// <param name="onInterval"></param> /// <param name="onBegin"></param> /// <returns></returns> public PipeLineSelectStage <TSource, TResult> Init <TSource, TResult>( IEnumerable <TSource> source, int workers, int queueSize, Func <TSource, TResult> filter, OnBeginEventHandler onBegin = null, OnFinishEventHandler onFinish = null, OnIntervalEventHandler onInterval = null ) { if (workers <= 0) { throw new PipeLineException("Workers must be more than 1"); } if (queueSize <= 0) { throw new PipeLineException("QueueSize must be more than 1"); } var s = new BlockingCollection <TSource>(); foreach (var item in source) { s.Add(item, token); } s.CompleteAdding(); var rt = new PipeLineSelectStage <TSource, TResult>(s, workers, queueSize, filter, onBegin, onFinish, onInterval); // first stage stages.Add(rt); return(rt); }
public PipeLineStageBase <TResult, TNextResult> Then <TNextResult>( int workers, int queueSize, Func <TResult, TNextResult> filter, OnBeginEventHandler onBegin = null, OnFinishEventHandler onFinish = null, OnIntervalEventHandler onInterval = null ) { var rt = new PipeLineSelectStage <TResult, TNextResult>(Results, workers, queueSize, filter, onBegin, onFinish, onInterval); Next = rt; return(rt); }