Пример #1
0
        public async Task WhenAQueuedTaskThrowsAnExceptionThenQueueContinues()
        {
            var queue          = GetQueue();
            var processedItems = new List <string>();

            Task ProcessItem(string item)
            {
                if (item == InvalidItem)
                {
                    throw new NotSupportedException();
                }
                processedItems.Add(item);
                return(Task.CompletedTask);
            }

            using (var service = new MockHostedQueueService <string>(ProcessItem, queue, _logger, new HostedQueueOptions()))
                using (var cts = new CancellationTokenSource(TimeSpan.FromSeconds(2)))
                {
                    await service.StartAsync(cts.Token);

                    await Task.Delay(100);

                    await service.StopAsync(cts.Token);

                    Assert.Equal(ValidItem, Assert.Single(processedItems));
                    Assert.True(queue.IsEmpty);
                }
        }
Пример #2
0
        public async Task WhenAQueuedTaskThrowsAnExceptionAndRequeueIsEnabledTheItemGetsReprocessed()
        {
            var queue          = GetQueue();
            var processedItems = new List <string>();
            var invalidItems   = new List <string>();

            Task ProcessItem(string item)
            {
                if (item == InvalidItem)
                {
                    invalidItems.Add(item);
                    if (invalidItems.Count < 2)
                    {
                        throw new NotSupportedException();
                    }
                }
                else
                {
                    processedItems.Add(item);
                }
                return(Task.CompletedTask);
            }

            var options = new HostedQueueOptions
            {
                RequeueFailedItems = true
            };

            using (var service = new MockHostedQueueService <string>(ProcessItem, queue, _logger, options))
                using (var cts = new CancellationTokenSource(TimeSpan.FromSeconds(2)))
                {
                    await service.StartAsync(cts.Token);

                    await Task.Delay(100);

                    await service.StopAsync(cts.Token);

                    Assert.Equal(ValidItem, Assert.Single(processedItems));
                    Assert.Equal(2, invalidItems.Count);
                    foreach (var item in invalidItems)
                    {
                        Assert.Equal(InvalidItem, item);
                    }
                    Assert.True(queue.IsEmpty);
                }
        }