/// <summary> /// Tenta obter o dado em memoria do preloader, caso nao seja encontrado, executa o força a execucao do preloader para obter os dados, tenta obter os dados, e retorna. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="preLoaderService"></param> /// <param name="preLoaderName"></param> /// <param name="fetchFunc"></param> /// <returns></returns> public static async Task <T> GetOrInvokePreLoaderAsync <T>(this IPreLoaderService preLoaderService, string preloaderName, PreLoadParameters parameters = null) where T : class { var response = PreLoaderServiceCore.Instance.GetCachedPreLoadedData <T>(preloaderName, parameters); if (response != default(T)) { return(response); } else //null { //Dispara a execucao do Preloader da implementacao do usuario var observable = PreLoaderServiceCore.Instance.InvokePreLoaderWithObservable <T>(preloaderName, parameters); observable.Subscribe(f => Debug.WriteLine($"Invoked {nameof(PreLoaderReactiveExtensions)}.{nameof(PreLoaderReactiveExtensions.GetOrInvokePreLoaderAsync)}")); await observable.ForEachAsync(x => Debug.WriteLine(x)); //tenta obter o resultado resultante da execucao do preloader... response = PreLoaderServiceCore.Instance.GetCachedPreLoadedData <T>(preloaderName, parameters); return(response); } }
public IObservable <RestCountriesModel[]> GetData(PreLoadParameters parameters) { var response = remoteDataService.GetDataAsync().ToObservable(); return(response); }
/// <summary> /// Tenta retornar o dado do cache do PreLoader e caso nao seja encontrado força a execucao do preloader para obter os dados, atualiza o cache do PreLoader e retorna os novos dados obtidos. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="preLoaderService"></param> /// <param name="preLoaderName"></param> /// <returns></returns> public static IObservable <T> GetOrInvokePreLoader <T>(this IPreLoaderService preLoaderService, string preLoaderName, PreLoadParameters parameters = null) where T : class { var fetch = Observable.Start <T>(() => PreLoaderServiceCore.Instance.GetCachedPreLoadedData <T>(preLoaderName, parameters), Scheduler) .SelectMany(response => Observable.FromAsync(async() => { if (response != null) { return(response); //retorna o dado do cache do preloader } Debug.WriteLine($"====PreLoaderReactiveExtensions.GetOrInvokePreLoaderObservable() - Thread Id: {Thread.CurrentThread.ManagedThreadId}"); //Forca a execucao do pre-loader... var observable = PreLoaderServiceCore.Instance.InvokePreLoaderWithObservable <T>(preLoaderName, parameters); await observable.ForEachAsync(x => Debug.WriteLine(x)); //tenta obter o resultado do preloader... response = PreLoaderServiceCore.Instance.GetCachedPreLoadedData <T>(preLoaderName, parameters); return(response); })); return(fetch); }