3
我已经写在阿卡-HTTP REST服务暴露一个/火端点。当该端点被调用时,我的服务应该发送一个文件,通常为〜50MB到不同的服务。但是,端点应该立即返回给调用者,并且继续以异常方式发送文件。scala期货在akka-http的回应后继续运行吗?
我的实现看起来像这样
path("fire") {
post { request: FireRequest =>
complete {
sendFile(request.path)
StatusCodes.OK
}
}
}
}
def sendFile(path: String): Future[Unit] = Future {
// send the large file to another service
}
我测试了它
,它工作正常。
但是,当使用ASP.NET实现类似的行为时,我需要使用第三方框架(Hangfire)来处理异步任务,因为完成的请求生成的线程最终会被终止。
我的问题是:在我的akka-http 发送文件保证运行,直到成功/失败的完成,否则会出现它运行的线程将被杀死的情况?
此外,也没有故意没有一个'scala.concurrent.Future',还是我失去了一些东西的概念? – rethab
不确定你失败的意思。你确实可以将任何成功的未来转化为失败的承诺,并且你可以创造失败的承诺。有条件地将成功承诺转化为失败的承诺可以在条件下完成,因此您可能能够实现某种“未来取消”(但是,这种取消是有限的,并且会将成功转化为当前承诺的失败,它不会传播回“资源”) –