public async Task BackgroundUriRequester_StopAsync_Stops_Current_Active_Request()
        {
            var cancelled = false;
            Func<Uri, CancellationToken, bool> processor = (u, c) => DoProcessing(c, out cancelled);

            var requester = new BackgroundUriRequester(processor);
            requester.Add(TestHelpers.CreateRequestList(1)[0]);
            requester.Start(TimeSpan.FromMilliseconds(10));

            await Task.Delay(TimeSpan.FromSeconds(1), CancellationToken.None);

            Assert.IsFalse(cancelled);
            await requester.StopAsync();
            Assert.IsTrue(cancelled);
        }
        public void BackgroundUriRequester_Start_Uses_Previous_List_First()
        {
            var expectedList = TestHelpers.CreateRequestList(10);
            var actualList = new List<Uri>();
            Func<Uri, CancellationToken, bool> processor = (u, c) => { actualList.Add(u); return true; };

            var requester = new BackgroundUriRequester(processor);
            requester.Start(TimeSpan.FromMilliseconds(10), expectedList.Take(5));
            foreach (var uri in expectedList.Skip(5))
                requester.Add(uri);

            TestHelpers.WaitForQueueToEmpty(requester);
            Assert.AreEqual(expectedList.Count, actualList.Count);
            CollectionAssert.AreEqual(expectedList, actualList);
        }
        public void BackgroundUriRequester_StopAsync_Stops_Requesting()
        {
            var actualList = new List<Uri>();
            Func<Uri, CancellationToken, bool> processor = (u, c) => { actualList.Add(u); return true; };

            var requester = new BackgroundUriRequester(processor);
            requester.Start(TimeSpan.FromMilliseconds(10));

            Task.Delay(1000, CancellationToken.None).GetAwaiter().GetResult();

            requester.StopAsync().Wait(CancellationToken.None);
            foreach (var uri in TestHelpers.CreateRequestList(3))
                requester.Add(uri);

            Assert.AreEqual(0, actualList.Count);
            Assert.AreEqual(3, requester.QueueCount);
        }