/// <summary> /// Start the requester with any unsent URIs from the last application run. /// </summary> protected void StartRequester() { SetupRequester(); backgroundRequester = new BackgroundUriRequester(Request, IsInternetAvailable); var previousRequests = Load <List <Uri> >(QueueStorageName); backgroundRequester.Start(lastUploadInterval, previousRequests); }
/// <summary> /// Start the requester with any unsent URIs from the last application run. /// </summary> /// <returns>Task that completes when the requester is ready.</returns> protected async Task StartRequesterAsync() { await SetupRequesterAsync(); backgroundRequester = new BackgroundUriRequester(Request, IsInternetAvailable); var previousRequests = await Load <List <Uri> >(QueueStorageName); backgroundRequester.Start(lastUploadInterval, previousRequests); }
public static void WaitForQueueToEmpty(BackgroundUriRequester requester) { var time = new Stopwatch(); time.Start(); while (requester.QueueCount != 0 && time.Elapsed < timeout) { Task.Delay(TimeSpan.FromMilliseconds(100)).Wait(); } }
public void BackgroundUriRequester_Start_Uses_Previous_List() { var expectedList = TestHelpers.CreateRequestList(4); 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); TestHelpers.WaitForQueueToEmpty(requester); Assert.AreEqual(expectedList.Count, actualList.Count); CollectionAssert.AreEqual(expectedList, actualList); }
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_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); }
/// <summary> /// Suspend the requester and preserve any unsent URIs. /// </summary> protected void StopRequesterAsync() { var safeBackgroundRequester = backgroundRequester; if (safeBackgroundRequester == null) { return; } var recentRequestsToPersist = new List <Uri>(); if (safeBackgroundRequester.IsStarted) { var pendingRequests = safeBackgroundRequester.StopAsync().GetAwaiter().GetResult(); recentRequestsToPersist = pendingRequests.Skip(pendingRequests.Count - MaximumRequestsToPersist).ToList(); } Save(recentRequestsToPersist, QueueStorageName); Save(sessionManager.GetState(), SessionStorageName); safeBackgroundRequester.Dispose(); backgroundRequester = null; }