У меня есть приложение UWP, в котором я вызываю веб-службу для получения списка продуктов с сервера.
ItemWebService
public async Task<IObservable<ProductListItem>> GetProductlistAsync()
{
var productList = await _restClient.Get<IEnumerable<ProductListItem>>($"{_serviceUrl}/productlist");
return productList.ToObservable();
}
ProductListItemкласс
public class ProductListItem
{
public int Id { get; set; }
public string SkuValue{ get; set; }
}
Я хочу кэшировать productList
в течение определенного периода времени (например, скажем, 10 минут).Всякий раз, когда вызывается GetProductlistAsync()
, он должен сначала смотреть в кэш и возвращать, если присутствует кэшированный список.
Я пытался сохранить локальную переменную в ItemWebService
для кэширования списка.Но всякий раз, когда пользователь переходит на другую страницу, переменная очищается.
Примечание. Я буду вызывать эту службу с разных страниц моего приложения UWP.Поэтому код не должен очищать кэшированную переменную, когда пользователь переходит на другую страницу.
Ниже приведен код, который я пробовал.
private IObservable<ProductListItem> cachedProductList;
if (cachedProductList == null)
{
var dbProductList = await GetProductlistAsync();
var period = TimeSpan.FromSeconds(20);
var observable = Observable.Interval(period).Publish();
observable.Connect();
observable.Subscribe(async l =>
{
cachedProductList = await
GetProductlistAsync().ToObservable().Replay();
}
);
}
Я хочу добиться этого с помощью Rx Extensions
.