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(); }
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); } }
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(); }
public void Interval(int mils) { Console.WriteLine($"Intervaling {mils}..."); OnInterval?.Invoke(this, new IntervalEventArgs { Millis = mils }); }
private void SetInterval_Click(object sender, TargetEventArgs e) => OnInterval?.Invoke();