Akka Streams - Как проверить, успешно ли запущен поток? - PullRequest
0 голосов
/ 20 июня 2019

У меня есть источник source типа Source[ByteString, Any] и приемник sink типа Sink[ByteString, M], где M может быть Future[IOResult] или чем-то еще. Когда я запускаю следующее:

source.runWith(sink)

Я получаю M в результате. Я не получаю никакой другой полезной информации, указывающей, что поток был успешным. Если он гарантированно равен Future[IOResult], это было бы замечательно, но приемник был получен из общего класса типов, и вы не можете определить тип во время компиляции.

Однако все экземпляры класса типов должны сообщать о том, была ли операция успешной.

Или я должен обернуть материализованный тип в пользовательский, например Result[M], которым я могу легко манипулировать? Для этого может потребоваться новый класс типов, членами которого должны быть экземпляры M (например, вы должны указать, как Future[IOResult] преобразуется в Result[Future[IOResult]]. То же самое для всех возможных экземпляров M).

1 Ответ

0 голосов
/ 20 июня 2019

Мне удалось заставить его работать.Я выдвинул требование, чтобы у приемника было будущее в качестве вспомогательного значения:

Sink[ByteString, Future[M]]

Таким образом, любые экземпляры класса типов, возвращающие этот вид приемника, будут вынуждены переносить материализованное значение в Future.Для файлового ввода-вывода это не проблема, поскольку он уже возвращает Future[IOResult].

...