public async Task <RepositoryResult <KursnaListaZaDan> > NajnovijaKursnaListaAsync(CancellationToken cancellationToken) { var item = await _cacheService.GetAsync <KursnaListaZaDan>(KursnaListaLatestDataKey).ConfigureAwait(false); if (item.HasValue) { if (cancellationToken.IsCancellationRequested) { return(RepositoryResult <KursnaListaZaDan> .Create(item.Value, IsCurrent(item))); } if (IsCurrent(item)) { return(item.Value); } } var data = await _kursnaListaDataService.GetNajnovijaKursnaListaAsync(cancellationToken).ConfigureAwait(false); if (data != null) { await _cacheService.PutAsync(KursnaListaLatestDataKey, data).ConfigureAwait(false); } else { if (item.HasValue) { return(RepositoryResult <KursnaListaZaDan> .Create(item.Value, false)); } } return(data); }
protected async Task <RepositoryResult <T> > LoadFromCacheThenRefreshAsync <T>( string key, DateTime?updatedTime, Func <T, DateTime> updatedTimeFunc, TimeSpan staleAfter, TimeSpan expireAfter, Func <Task <ServiceResult <T> > > getDataFuncAsync, Func <RepositoryResult <T>, Task> refreshActionAsync = null ) { try { var useUpdatedTime = updatedTime != null; var cacheItem = useUpdatedTime ? await _cacheService.GetAsync <T>(key, updatedTime.Value) : await _cacheService.GetAsync <T>(key); if (cacheItem.HasValue && !cacheItem.IsStale && !cacheItem.IsExpired) { return(RepositoryResult <T> .Create(cacheItem.Value)); } if (cacheItem.HasValue && cacheItem.IsStale && !cacheItem.IsExpired && refreshActionAsync != null) { refreshActionAsync(RepositoryResult <T> .Create(cacheItem.Value, false)); } var serviceResult = await getDataFuncAsync().ConfigureAwait(false); if (serviceResult.Successful) { if (useUpdatedTime) { // ReSharper disable once CSharpWarnings::CS4014, no need to wait storage operation _cacheService.PutAsync(key, updatedTimeFunc(serviceResult.Value), serviceResult.Value, DateTime.Now + staleAfter, DateTime.Now + expireAfter); } else { // ReSharper disable once CSharpWarnings::CS4014, no need to wait storage operation _cacheService.PutAsync(key, serviceResult.Value, DateTime.Now + staleAfter, DateTime.Now + expireAfter); } } return(serviceResult); } catch (Exception xcp) { return(RepositoryResult <T> .CreateError(xcp)); } }
public async Task <RepositoryResult <KursnaListaZaDan> > NajnovijaKursnaListaAsync(CancellationToken cancellationToken) { return(RepositoryResult <KursnaListaZaDan> .Create(_kursnaListZaDan, true)); }