Как работает 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