示例#1
0
 public void Add(WorkQueueItem work)
 {
     lock (_workQueue)
     {
         _workQueue.Enqueue(work);
     }
 }
示例#2
0
 public void Add(WorkQueueItem work)
 {
     lock (_workQueue)
     {
         _workQueue.Enqueue(work);
     }
 }
示例#3
0
 public void Add(WorkQueueItem work)
 {
     lock (_workQueue)
     {
         _workQueue.Add(work);
         _event.Set();
     }
 }
示例#4
0
 public void Add(WorkQueueItem work)
 {
     lock (_workQueue)
     {
         _workQueue.Add(work);
         _event.Set();
     }
 }
示例#5
0
        public void DoWorkWillRetryForRetryExceptions()
        {
            var work = new WorkQueueItem(() =>
            {
                throw new ArgumentException();
            }, 2, new[] { typeof(ArgumentException) });

            var result = work.DoWork();

            Assert.That(result.Success, Is.False);
            Assert.That(result.ShouldRetry, Is.True);
        }
示例#6
0
        public void DoWorkDoesTheWork()
        {
            var actionCompleted = false;

            var work = new WorkQueueItem(() => actionCompleted = true, 1);

            var result = work.DoWork();

            Assert.That(actionCompleted, Is.True);
            Assert.That(result.Success, Is.True);
            Assert.That(result.ShouldRetry, Is.False);
        }
示例#7
0
        public void DoWorkCatchesExceptions()
        {
            var exception = new Exception();

            var work = new WorkQueueItem(() =>
                {
                    throw exception;
                }, 1);

            var result = work.DoWork();

            Assert.That(result.Success, Is.False);
            Assert.That(result.ShouldRetry, Is.False);
            Assert.That(result.Exception, Is.EqualTo(exception));
        }
示例#8
0
        public void ResultCanBeCalledMultipleTimes()
        {
            var work = new WorkQueueItem(() => { }, 1);

            work.DoWork();

            var result1 = work.Result;
            var result2 = work.Result;

            Assert.That(result1, Is.EqualTo(result2));
        }
示例#9
0
        public void TriesAreDecremented()
        {
            var work = new WorkQueueItem(() =>
            {
                throw new ArgumentException();
            }, 3, new[] { typeof(ArgumentException) });

            var result = work.DoWork();

            Assert.That(result.Success, Is.False);
            Assert.That(result.ShouldRetry, Is.True);
            Assert.That(result.Tries, Is.EqualTo(2));

            result = work.DoWork();

            Assert.That(result.Success, Is.False);
            Assert.That(result.ShouldRetry, Is.True);
            Assert.That(result.Tries, Is.EqualTo(1));

            result = work.DoWork();

            Assert.That(result.Success, Is.False);
            Assert.That(result.ShouldRetry, Is.False);
            Assert.That(result.Tries, Is.EqualTo(0));
        }
示例#10
0
        public void ResultIsSetToTheLastResult()
        {
            var called = false;

            var work = new WorkQueueItem(() =>
                {
                    throw new ArgumentException();
                }, 2, new[] {typeof (ArgumentException)});

            var result = work.DoWork();

            Assert.That(result.Success, Is.False);
            Assert.That(result.ShouldRetry, Is.True);

            result = work.DoWork();

            Assert.That(result.Success, Is.False);
            Assert.That(result.ShouldRetry, Is.False);
            Assert.That(work.Result, Is.EqualTo(result));
        }