From 644e49c6ed4e597b6771ae48c732d46c10585259 Mon Sep 17 00:00:00 2001 From: James Montemagno Date: Wed, 30 Mar 2022 21:36:21 -0700 Subject: [PATCH] Merge pull request #57 from eerhardt/MoveInitialHttpToBackground-main Run GetShowsAsync in the background --- src/Mobile/Services/ShowsService.cs | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/Mobile/Services/ShowsService.cs b/src/Mobile/Services/ShowsService.cs index db17fa0..ab6ee6b 100644 --- a/src/Mobile/Services/ShowsService.cs +++ b/src/Mobile/Services/ShowsService.cs @@ -9,6 +9,7 @@ public class ShowsService { private readonly HttpClient httpClient; private readonly ListenLaterService listenLaterService; + private bool firstLoad = true; public ShowsService(ListenLaterService listenLaterService) { @@ -73,7 +74,25 @@ public class ShowsService return new Show(response, listenLaterService); } - private async Task TryGetAsync(string path) + private Task TryGetAsync(string path) + { + if (firstLoad) + { + firstLoad = false; + + // On first load, it takes a significant amount of time to initialize + // the ShowsService. For example, Connectivity.NetworkAccess, Barrel.Current.Get, + // and HttpClient all take time to initialize. + // + // Don't block the UI thread while doing this initialization, so the app starts faster. + // Instead, run the first TryGet in a background thread to unblock the UI during startup. + return Task.Run(() => TryGetImplementationAsync(path)); + } + + return TryGetImplementationAsync(path); + } + + private async Task TryGetImplementationAsync(string path) { var json = string.Empty;