//private ConcurrentBag<bool> results; public SimpleActionBlock(BlockingCollection <WorkItem> inputQueue) { var opts = new ExecutionDataflowBlockOptions { TaskScheduler = TaskScheduler.Current, MaxDegreeOfParallelism = 2 }; _queue1 = new ActionBlock <WorkItem>(job => job.Execute(Thread.CurrentThread.ManagedThreadId), opts); _queue2 = new ActionBlock <WorkItem>(job => job.Execute(Thread.CurrentThread.ManagedThreadId), opts); _buffer.LinkTo(_queue1, new DataflowLinkOptions() { PropagateCompletion = true }); _buffer.LinkTo(_queue1); _buffer.LinkTo(_queue2); Task.Run(async() => { foreach (var job in inputQueue.GetConsumingEnumerable()) { if (job.Assigne.StartsWith("a")) { _buffer.Post(job, Priority.Medium); } if (job.Assigne.StartsWith("q")) { _buffer.Post(job, Priority.Medium); } if (job.Assigne.StartsWith("z")) { _buffer.Post(job, Priority.High); } else { _buffer.Post(job, Priority.Low); } } }); }
public void StartConsuming() { foreach (var job in InputQueue.GetConsumingEnumerable()) { if (job.Assigne.StartsWith("a")) { _buffer.Post(job, Priority.Medium); } if (job.Assigne.StartsWith("q")) { _buffer.Post(job, Priority.Medium); } if (job.Assigne.StartsWith("z")) { _buffer.Post(job, Priority.High); } //else //{ // await _buffer.SendAsync(job, Priority.Low); //} } }