非阻塞scala循环
Scala中有没有一种方法可以在循环中执行某些内容而不阻塞整个流程 我有下面的代码在Actor模型中传输一些东西 所有演员都会向其他演员发送:非阻塞scala循环,scala,loops,actor,nonblocking,Scala,Loops,Actor,Nonblocking,Scala中有没有一种方法可以在循环中执行某些内容而不阻塞整个流程 我有下面的代码在Actor模型中传输一些东西 所有演员都会向其他演员发送: def some_method loop { // Transmit something Thread.sleep(100) } 我也有一些代码来接收其他演员发送的内容。但这种流动并不是从循环中出来的。它会休眠并继续,但不会退出循环。因此,所有参与者都在不断发送,但没有人接收。如何修复此问题?如果我理解正确,您希望每100ms传输一次,但不
def some_method
loop {
// Transmit something
Thread.sleep(100)
}
我也有一些代码来接收其他演员发送的内容。但这种流动并不是从循环中出来的。它会休眠并继续,但不会退出循环。因此,所有参与者都在不断发送,但没有人接收。如何修复此问题?如果我理解正确,您希望每100ms传输一次,但不希望为此创建另一个线程(以及
线程。演员内部的睡眠可能确实会阻止流)。
您可以在
中使用:
import java.util.Date
import math.max
def some_method = {
var last_transmission_time = 0
loop {
val current_time = (new Date).getTime
reactWithin(max(0, last_transmission_time + 100 - current_time)) {
// actor reaction cases
case TIMEOUT => {
// Transmit something
last_transmission_time = (new Date).getTime
}
}
}
}
last\u transmission\u time
保存上次完成传输的时间。
计算反应超时,以便在当前时间为最后一次传输时间+100ms时发生超时
如果发生超时,则表示自上次传输以来已超过100毫秒,因此应调用另一次传输
如果反应案例本身可能需要很多时间,那么除了创建另一个线程,我看不到任何简单的解决方案
我没有尝试代码,因为我不确定我是否完全理解您的问题。将方法重构为参与者?