public override void Invoke(CancellationToken token)
        {
            OnBegin?.Invoke();

            var tasks = new List <Task>();

            for (var i = 0; i < Workers; i++)
            {
                tasks.Add(Task.Factory.StartNew(() => {
                    foreach (var source in Sources.GetConsumingEnumerable())
                    {
                        token.ThrowIfCancellationRequested();

                        foreach (var result in filter(source))
                        {
                            Results.Add(result, token);
                            OnInnerInterval?.Invoke(result);
                        }

                        OnInterval?.Invoke(source);
                    }
                }, token));
            }

            Task.WaitAll(tasks.ToArray());

            Results.CompleteAdding();
            OnFinish?.Invoke();
        }
Exemple #2
0
        private void Worker()
        {
            foreach (var source in Sources.GetConsumingEnumerable(token))
            {
                // Cancelが発生していたら例外を投げる
                token.ThrowIfCancellationRequested();

                switch (Mode)
                {
                case PipeLineStageMode.Last:
                    outputAction(source);
                    break;

                case PipeLineStageMode.SelectMany: {
                    foreach (var result in manyFilter(source))
                    {
                        Results.Add(result, token);
                        TotalResultsCount++;
                    }

                    break;
                }

                case PipeLineStageMode.Select:
                    Results.Add(filter(source), token);
                    TotalResultsCount++;
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }

                OnInterval?.Invoke(source);
            }
        }
Exemple #3
0
        public override void Invoke(CancellationToken token)
        {
            OnBegin?.Invoke();
            var box = new List <List <TItem> > {
                new List <TItem>()
            };
            var idx = 0;

            foreach (var item in Sources.GetConsumingEnumerable())
            {
                token.ThrowIfCancellationRequested();
                OnInterval?.Invoke(item);

                box[idx].Add(item);
                if (box[idx].Count != Size)
                {
                    continue;
                }

                Results.Add(box[idx].ToArray(), token);
                idx++;
                box.Add(new List <TItem>());
            }

            if (box[idx].Any())
            {
                Results.Add(box[idx].ToArray(), token);
            }
            Results.CompleteAdding();
            OnFinish?.Invoke();
        }
Exemple #4
0
 public void Interval(int mils)
 {
     Console.WriteLine($"Intervaling {mils}...");
     OnInterval?.Invoke(this, new IntervalEventArgs
     {
         Millis = mils
     });
 }
Exemple #5
0
 private void SetInterval_Click(object sender, TargetEventArgs e) => OnInterval?.Invoke();