public void EnqueueSeveralSlowLowPriorityItemsWhichThrowExceptionsAndThenHighPriorityItem()
        {
            List <string> handledItemsOrder = new List <string>();

            var subject = new PriorityTaskQueue <string>(
                item =>
            {
                handledItemsOrder.Add(item);
                if (item.StartsWith("A"))
                {
                    Thread.Sleep(50);
                    throw new Exception("Simulating exception in handling method");
                }
            });

            for (int i = 0; i < 4; i++)
            {
                subject.Post("A" + i, 22);
            }

            subject.Post("B", 0);

            subject.BusyTask.Wait();

            CollectionAssert.AreEqual(new[] { "A0", "B", "A1", "A2", "A3" }, handledItemsOrder);
        }
        public void EnqueueOneItem()
        {
            string handledItem = null;

            var subject = new PriorityTaskQueue <string>(
                item => handledItem = item);

            subject.Post("hello", 0);

            subject.BusyTask.Wait();

            Assert.AreEqual("hello", handledItem);
        }
        public void Enqueue10ItemsSamePriority()
        {
            int handledItems = 0;

            var subject = new PriorityTaskQueue <string>(
                item => handledItems++);

            for (int i = 0; i < 10; i++)
            {
                subject.Post("A" + i, 0);
            }

            subject.BusyTask.Wait();

            Assert.AreEqual(10, handledItems);
        }