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; }
/// <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; }