示例#1
0
        /// <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);
        }
示例#2
0
        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);
        }