我正在使用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()
}
问题是,如果我尝试将pullFile()放入传递给从async.push返回的Future上的函数的任何块中,则会发生大量编译错误。但是,我发现如果将pullFile()分配给块外的val,然后在块内使用它,我确实可以编译它。我会检查是否正确运行,然后更新答案。 –