Как стать автором
Обновить

Комментарии 9

Спасибо за интересную статью! У меня вопрос — можно ли в Stream интегрировать ожидание пользовательского ввода? Понятно, что можем сделать какой-то цикл с опросом базы, например, но мб есть еще какие-то более эффективные способы посылать сообщения в стрим?
Добрый день. Посольку самые разные источники данных можно сконфигурировать как источники потока (stream source), то можно использовать практически все что угодно — все, из чего можно извлечь Stream, Task, IEnumerable etc. Т.е. если у вас на входе пользователь время от времени вводит какие-то строки, их можно подавать в поток как IEnumerable<string>.

Нет, как IEnumerable<string> их подавать нельзя, разве что отдельный поток для этого выделить. Ну, для консоли это сойдет, ее все равно асинхронно не прочитать, а для других форм пользовательского ввода так делать нельзя.

А почему из другой формы пользовательского ввода нельзя создать поток, который бы питался из IEnumerable string?
Потому что IEnumerable — это синхронный pull-based поток. Вот библиотека уже вызвала метод MoveNext, а пользователь еще ничего не ввел, что возвращать? Вернуть true нельзя, потому что это означает что следующий элемент уже доступен. Вернуть false тоже нельзя, потому что это означает конец потока. Единственное что можно сделать — заблокировать поток в ожидании. Но это требует выделенного потока под простое перекладывание строк из одного контейнера в другой.
Вы правы. Я имел в виду использование yield, но yield не работает с async/await. Но можно вернуть IEnumerable of Task of string, как здесь предлагают:

ctigeek.net/using-asyncawait-with-ienumerable-and-yield-return

Применительно к Akka — это костыли на костылях. Есть же Source.Queue()!

Разумеется! Просты мы начали копаться в IEnumerable (хоть и моей подачи).

Наткнулся случайно:


То, что показано на примере выше, называется «графический DSL на C#». На самом деле никакой графики здесь нет...

… и не должно быть, потому что "Graph DSL" переводится как "графовый", а не "графический".

Зарегистрируйтесь на Хабре, чтобы оставить комментарий