如何使用可能需要重新运行的任务组成可观察的



假设我有一个运行查询的异步方法并返回一组结果:

Task<IEnumerable<Foo>> FetchResultSet();

,我有一个可观察到的可见结果集需要再次获取:

IObservable<Unit> NeedToRefetch;

我想要的是:

IObservable<IEnumerable<Foo>>

哪个将(1)运行查询并产生初始结果集,(2)每次NeedToRefetch射击,运行再次查询并产生另一个结果集。

组成这种可观察的最佳方法是什么?

如果我不需要初始结果集,我可以做到这一点:

NeedToRefetch
    .Select(_ => Observable.FromAsync(() => FetchResultSet()))
    .Concat();

因此,为了确保查询至少运行一次,我可以这样做:

Observable.Return(Unit.Default)
    .Merge(NeedToRefetch)
    .Select(_ => Observable.FromAsync(() => FetchResultSet()))
    .Concat();

,但后来我开始阅读有关冷热可观察到的东西,我想知道我是否应该这样做:

var initial = Observable.FromAsync(() => FetchResultSet());
var later = NeedToRefetch
    .Select(_ => Observable.FromAsync(() => FetchResultSet()))
    .Concat();
initial
    .Merge(later);

,然后我想知道这是否是我应该使用的情况 Observable.Create

然后我不再想知道并写了这个问题。

我会说你快到了。您可以使用原始方法。要使它立即运行一次,您可以包括一个StartWith()

NeedToRefetch
    .StartWith(Unit.Default)
    .Select(_ => Observable.FromAsync(() => FetchResultSet()))
    .Concat();

相关内容

  • 没有找到相关文章

最新更新