I am using Scala 2.13.0, on macOS 10.14.6
I’ve created a function for debugging purposes, that takes () => T
as a parameter, and behaves in 2 different ways when the parameter is an assigned variable, and when the value is passed without assignment.
It seems that any () => T
expression that I would pass straight to my function (without a preceding assignment to variable) will loop forever (meaning that the future never completes).
The function:
import scala.concurrent.{ExecutionContext, Future}; implicit val xc = ExecutionContext.global
def runInBackgroundAndLog[T](block: () => T, waitMessage: String)(implicit xc: ExecutionContext): T = {
val fut = Future {block.apply}
var i = 1
while (!fut.isCompleted) {
println(waitMessage)
Thread.sleep(3000)
i += 1
}
fut.value.get.get
}
Now when I run this:
val f = () => Thread.sleep(6000)
runInBackgroundAndLog(f, "still running")
It prints still running twice, and returns.
But when I run it without a preceding variable assignment, the while loop seems to run forever:
runInBackgroundAndLog(() => Thread.sleep(6000), "still running")
I expect the behaviour of the first example (with preceding variable assignment) to work in both cases, or at least to understand why it is different.