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