Повторное использование результата из первой наблюдаемой в секунду в C # - PullRequest
0 голосов
/ 06 декабря 2018

Результатом первой наблюдаемой (itemsCache.GetAllKeys()) является список строк.Если этот список содержит определенную строку (DOKUMENTI_KEY), то должна вызываться вторая наблюдаемая.Если первая наблюдаемая не содержит строку, то должен быть возвращен пустой список.

    public static IObservable<TResult> If<TSource, TResult>(
                this IObservable<TSource> source,
                Func<TSource, bool> predicate,
                Func<TSource, IObservable<TResult>> thenSource,
                Func<TSource, IObservable<TResult>> elseSource)
            {
                return source
                  .SelectMany(
                    value => predicate(value)
                      ? thenSource(value)
                      : elseSource(value));
            }

    public IObservable<List<Dokument>> GetDokumenti()
            {
                return Observable.If(
                    () => itemsCache.GetAllKeys().SelectMany(x => x).Contains(DOKUMENTI_KEY).GetAwaiter().GetResult(),
                    itemsCache.GetAllKeys().SelectMany(y => y).Where(a => a == DOKUMENTI_KEY).SelectMany(z => itemsCache.GetObject<List<Dokument>>(z)),
                    Observable.Return(new List<Dokument>())
                );

        }

Есть ли лучший способ сделать это?

...