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