//private ConcurrentBag<bool> results; public SimpleActionBlockPriority(BlockingCollection <WorkItem> inputQueue) { InputQueue = inputQueue; var opts = new ExecutionDataflowBlockOptions() { MaxDegreeOfParallelism = 2, BoundedCapacity = 2 }; _buffer = new PriorityBufferBlock <WorkItem>(); _queue1 = new ActionPriorityBlock <WorkItem>(job => job.Execute(Thread.CurrentThread.ManagedThreadId + 100), opts); _queue2 = new ActionPriorityBlock <WorkItem>(job => job.Execute(Thread.CurrentThread.ManagedThreadId + 200), opts); //var linkOptions = new DataflowLinkOptions(){PropagateCompletion = true}; _buffer.LinkTo(_queue1.HightPriorityTarget, (job) => job.Assigne.StartsWith("q")); _buffer.LinkTo(_queue1.LowPriorityTarget, (job) => !job.Assigne.StartsWith("q")); _buffer.LinkTo(_queue2.HightPriorityTarget, (job) => job.Assigne.StartsWith("a")); _buffer.LinkTo(_queue2.LowPriorityTarget, (job) => !job.Assigne.StartsWith("a")); }