Метод FileIO.toPath
материализует поток в Future[IOResult]
. Если вы работаете с потоком A
, который записывает в файл:
val someDataSource : Source[ByteString, _] = ???
val filePath : Path = ???
val fileWriteOptions : Set[OpenOption] = ???
val A : Future[IOResult] =
someDataSource
.to(FileIO.toPath(filePath, fileWriteOptions))
.run()
Вы можете использовать материализованное Будущее, чтобы запустить ваш поток B
, как только запись будет завершена:
val fileReadOptions : Set[OpenOption] = ???
val someProcessingWithTheDataOfB : Sink[ByteString, _] = ???
A foreach { _ =>
val B : Future[IOResult] =
FileIO
.fromPath(filePath, fileReadOptions)
.to(someProcessingWithTheDataOfB)
.run()
}
Аналогично, вы можете провести некоторое тестирование IOResult
перед чтением, чтобы убедиться, что в процессе записи не было сбоев:
A.filter(ioResult => ioResult.status.isSuccess)
.foreach { _ =>
val B : Future[IOResult] =
FileIO
.fromPath(filePath, readOptions)
.to(someProcessingOfB)
.run()
}