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