Я работаю с потоком данных akka, и я хотел бы знать, есть ли способ заставить конкретный блок кода ждать завершения будущего, без явного использования значения этого будущее.поток данных akka и побочные эффекты
Фактический вариант использования заключается в том, что у меня есть файл, и я хочу, чтобы файл был удален, когда определенное будущее завершено, но не раньше. Вот пример. Сначала представьте, у меня есть этот сервис:
trait ASync {
def pull: Future[File]
def process(input : File): Future[File]
def push(input : File): Future[URI]
}
И у меня есть рабочий процесс, я хочу работать в неблокирующей образом:
val uriFuture = flow {
val pulledFile = async.pull(uri)
val processedile = async.process(pulledFile())
val storedUri = async.push(processedFile())
// I'd like the following line executed only after storedUri is completed,
// not as soon as pulled file is ready.
pulledFile().delete()
storedUri()
}
Проблема в том, что если я попытаюсь поместить drawFile() внутри любого блока, переданного функции Future в async.push, я получаю тонну ошибок компиляции. Тем не менее, я обнаружил, что мне нужно его скомпилировать, если я назначил pullFile() для val вне блока, а затем использовать его внутри блока. Я проверю, правильно ли это работает, а затем обновить ответ. –