Exemplo n.º 1
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);
                }
        }
 public MockHostedQueueService(Func <T, Task> processItem, IServiceQueue <T> queue, ILogger logger, HostedQueueOptions options) : base(queue, logger, options)
 {
     _processItem = processItem;
 }
Exemplo n.º 3
0
 /// <summary>
 /// Constructor for hosted queues
 /// </summary>
 /// <param name="queue">The queue to process</param>
 /// <param name="logger">A standard logger to use for reporting errors</param>
 /// <param name="options">The options to use for this hosted queue</param>
 public HostedQueueService(IServiceQueue <T> queue, ILogger logger, HostedQueueOptions options)
 {
     _queue   = queue;
     _logger  = logger;
     _options = options;
 }