gpt4 book ai didi

c# - 创建一个 IObservable 并立即返回缓存异步操作的结果

转载 作者:太空宇宙 更新时间:2023-11-03 20:37:40 28 4
gpt4 key购买 nike

我正在使用响应式扩展来调用异步方法,我想缓存结果并将其返回以供后续调用该方法。

我如何创建一个 Observable 实例、返回它并提供订阅所需的数据 (cacheResult)?

public IObservable<Bar> GetBars(int pageIndex, int pageSize)
{
var @params = new object[] { pageIndex, pageSize };
var cachedResult = _cache.Get(@params);
if (cachedResult != null)
{
// How do I create a Observable instance and return the 'cacheResult'...
return ...
}

var observable = new BaseObservable<Bar>();
_components.WithSsoToken(_configuration.SsoToken)
.Get(@params)
.Select(Map)
.Subscribe(c =>
{
_cache.Add(@params, c);
observable.Publish(c);
observable.Completed();
}, exception =>
{
observable.Failed(exception);
observable.Completed();
});

return observable;
}

最佳答案

我相信您正在寻找Observable.Return :

return Observable.Return((Bar)cachedResult);

在一个不相关的注释上:

  • 无需返回 BaseObservable<T> .你应该返回 Subject<T>因为它执行您的实现正在执行的操作,但它是线程安全的(您还应该在返回值上调用 .AsObservable(),它不能被强制转换)。
  • 您使用 Do将值添加到缓存:

var observable = new Subject<Bar>();
_components.WithSsoToken(_configuration.SsoToken)
.Get(@params)
.Select(Map)
.Subscribe(c =>
{
_cache.Add(@params, c);
observable.OnNext(c);
observable.OnCompleted();
}, exception =>
{
observable.OnError(exception);
});

return observable.AsObservable();

关于c# - 创建一个 IObservable 并立即返回缓存异步操作的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4386526/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com