我的控制器中有一個函數,它接受用戶輸入,然後使用無限循環查詢數據庫並將從數據庫返回的對象發送到網頁。這一切都很好,除了我需要引入併發才能運行此邏輯並呈現網頁。使用Scala併發更改狀態
代碼爲:
def getSearchResult = Action { request =>
val search = request.queryString.get("searchInput").head.head
val databaseSupport = new InteractWithDatabase(comm, db)
val put = Future {
while (true) {
val data = databaseSupport.getFromDatabase(search)
if (data.nonEmpty) {
if (data.head.vendorId.equals(search)) {
comm.communicator ! data.head
}
}
}
}
Ok(views.html.singleElement.render)
}
產生的問題是,當我想再次調用此方法,但使用不同的輸入。因爲第一個線程處於無限循環中,所以它永遠不會停止運行,並且即使在我啓動第二個線程時也仍在運行。因此,兩個對象同時在兩個獨立的線程中被髮送到網頁。
一旦我再次調用此函數,我該如何停止第一個線程?或者,有沒有更好的實現這個想法,以便我可以不使用多線程呢?我試圖從這個函數中刪除併發(因爲多線程已經給我所有這些問題),而不是將它移動到Web套接字本身,但這提出了問題,因爲Web套接字連接到路由器,一切都通過路由器連接到網絡套接字。
你試過'if(nomore)break'嗎? – Dima