我的控制器中有一个函数,它接受用户输入,然后使用无限循环查询数据库并将从数据库返回的对象发送到网页。这一切都很好,除了我需要引入并发才能运行此逻辑并呈现网页。使用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