Как работает FirstAsync?
в моем вечном стремлении сосать меньше, я пытаюсь понять Rx.net s FirstAsync()
синтаксис. Большая часть документации предназначена для устаревших First()
Если я правильно понимаю, это позволяет мне запустить поток, как только прибудет первый элемент из потока.
скажем, у меня есть поток myStream
и я хочу запустить поток, который берет первый элемент и запускает поток на основе этого одного элемента. В моем случае это был бы поток из одного.
Я ожидаю, что это произойдет. это:
---1-2->
--- А - - ->
как бы я это сделал?
myStream.FirstAsync().Return(() => return "A"); // doesn't compile
2 ответов
Я не знаю, почему два других ответа говорят .FirstAsync()
возвращает Task
(или что вы должны называть .Result
). Он не возвращает Task
, он возвращает IObservable<TSource>
. Наблюдаемые объекты ожидаемы, но они не являются задачами.
для достижения желаемой функциональности выполните следующие действия:myStream.FirstAsync().Select(_ => "A")
.
вы также можете сделать myStream.Take(1).Select(_ => "A")
. Разница между этим и FirstAsync
версия, это FirstAsync
версия выдаст исключение, если myStream
завершается без любой элемент. Take(1)
завершит без ошибки.
в ответ на "как работает FirstAsync?":
он возвращает новый IObservable<T>
, содержащей:
первый элемент из исходного потока (когда он в конечном итоге производит один), а затем полный.
или, если исходный поток завершается без получения товара, исключение (через OnError), которое вам нужно будет обработать с помощью
Catch
или вSubscribe
так далее.
если вы предпочли бы получить значение по умолчанию вместо исключения, когда источник завершается без создания первого элемента, используйте FirstOrDefaultAsync