1
鑑於我有對象池,我怎麼能放心地返回一個池化對象返回到池中使用後,如果使用的是異步的? (在這種情況下使用Future
和Promise
)如何在異步使用後安全地將對象返回到池中?
下面是一個例子:
pool
.take
.flatMap {
connection =>
connection
.sendQuery("SELECT 0")
.map {
query =>
pool.giveBack(connection)
query.rows.get(0, 0)
}
}
這裏的問題是,如果sendQuery
調用失敗,對象將永遠不會被返回到池中。是否有某種未來的流水線序列,即使代碼本身不能這樣做,或者我應該忽略它,什麼可以讓我安全地將這個對象返回到池中?
我的主要目的是使池的使用盡可能小錯誤,因爲它目前顯然不是這樣,因爲程序員可能忘記返回對象,池會很快耗盡自己。