Где Observable.Iterate () в Rx 1.0.10621.0/1.1.10621.0 - PullRequest
2 голосов
/ 23 июля 2011

Я нахожу в сети несколько примеров Reactive Extensions, которые требуют использования Observable.Iterate (), но пакет от NuGet, Rx версии 1.0.10621.0, похоже, не включает его.Разве я все делаю неправильно?

Я предполагаю, что он был переименован, но я не могу найти никаких сообщений по этому поводу.Кто-нибудь знает?

Ответы [ 2 ]

4 голосов
/ 26 июля 2011

Из Rx Forum :

Уэс Дайер:

А как насчет Observable.Iterate?

Используйте Observable.Create, который принимает Func, Task> который работает точно так же, как итерация, за исключением того, что он использует асинхронный ждите, чтобы управлять им.

3 голосов
/ 02 марта 2015

Метод расширения Iterate может выглядеть так:

public static IObservable<T> Iterate<T, TIter>([NotNull] this IObservable<TIter> source, [NotNull] T iterationStart, [NotNull] Func<TIter, T, T> iterator)
{
    return Observable.Create<T>(observer =>
        {
            T previousElement = iterationStart;

            return source.Subscribe(
                    value =>
                        {
                            T currentElement = iterator(value, previousElement);
                            observer.OnNext(currentElement);
                            previousElement = currentElement;
                        },
                    observer.OnError,
                    observer.OnCompleted
                    );
        }).StartWith(iterationStart);
}
...