Merge pull request #57 from eerhardt/MoveInitialHttpToBackground-main

Run GetShowsAsync in the background
pull/58/head
James Montemagno 2022-03-30 21:36:21 -07:00 committed by Jonathan Peppers
parent 459e4f0d1a
commit 644e49c6ed
1 changed files with 20 additions and 1 deletions

View File

@ -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<T> TryGetAsync<T>(string path)
private Task<T> TryGetAsync<T>(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<T>(path));
}
return TryGetImplementationAsync<T>(path);
}
private async Task<T> TryGetImplementationAsync<T>(string path)
{
var json = string.Empty;