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
不確定你失敗的意思。你確實可以將任何成功的未來轉化爲失敗的承諾,並且你可以創造失敗的承諾。有條件地將成功承諾轉化爲失敗的承諾可以在條件下完成,因此您可能能夠實現某種「未來取消」(但是,這種取消是有限的,並且會將成功轉化爲當前承諾的失敗,它不會傳播回「資源」) –