Запуск задачи, когда Observable помечает и объединяет результаты (используя Rx.NET) - PullRequest
0 голосов
/ 11 марта 2019

Мне интересно, возможно ли запускать задачу каждый раз, когда наблюдаемые тики и продолжают конвейер с результатами этих задач.Порядок результата не имеет значения.Я использую C #.

linksObservable
    .Select(url=> downloadTask(url))
    ...

Приведенный выше код запускает задачи по загрузке URL-адресов, но как мне получить результаты, когда они доступны (то есть downloadTask завершен).Другое соображение Exceptions из задачи.Любое исключение не должно влиять на остальные задачи.

1 Ответ

2 голосов
/ 11 марта 2019

Хорошо, если downloadTask возвращает что-то, что вы можете сделать

observable
    .SelectMany(url => downloadTask(url))
    .Subscribe(result => Console.WriteLine(result));

Полный пример:

void Main()
{
    var observable = new Subject<string>();

    observable
        .SelectMany(url => downloadTask(url))
        .Subscribe(result => Console.WriteLine(result));

    observable.OnNext("a");
    observable.OnNext("b");
    observable.OnNext("c");
    observable.OnNext("d");
}

public async Task<string> downloadTask(string s)
{
    await Task.Delay(1000);
    return s;
}
...