-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Closed as not planned
Closed as not planned
Copy link
Description
Compiler version
3.4.2
Minimized code
import java.util.concurrent.ExecutorService
import java.util.concurrent.Future
import java.util.concurrent.TimeUnit
import java.util.concurrent.Executors
import java.util.concurrent.Callable
import scala.util.Try
import scala.util.Success
import scala.util.Failure
type Par[A] = ExecutorService => Future[A]
def unit[A](a: A): Par[A] = _ => UnitFuture(a)
case class UnitFuture[A](get: A) extends Future[A] {
def isDone = true
def get(timeout: Long, units: TimeUnit) = get
def isCancelled = false
def cancel(evenIfRunning: Boolean): Boolean = false
}
def fork[A](a: => Par[A]): Par[A] =
es =>
es.submit(new Callable[A] {
def call = a(es).get
})
val es = Executors.newFixedThreadPool(5)
val par = fork(unit(10)) // this will work: val par = fork(es => UnitFuture(10))
val f = par(es)
val r = Try(f.get(1, TimeUnit.SECONDS))
r match
case Success(v) => println(v)
case Failure(e) => e.printStackTrace()Output
java.util.concurrent.TimeoutException
at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:204)
at com.github.fmndantas.seven.Seven$.$anonfun$2(Main.scala:165)
at scala.util.Try$.apply(Try.scala:210)
at com.github.fmndantas.seven.Seven$.<clinit>(Main.scala:165)
at com.github.fmndantas.seven.Seven.main(Main.scala)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at sbt.Run.invokeMain(Run.scala:144)
at sbt.Run.execute$1(Run.scala:94)
at sbt.Run.$anonfun$runWithLoader$5(Run.scala:121)
at sbt.Run$.executeSuccess(Run.scala:187)
at sbt.Run.runWithLoader(Run.scala:121)
at sbt.Defaults$.$anonfun$bgRunTask$6(Defaults.scala:2038)
at sbt.Defaults$.$anonfun$termWrapper$2(Defaults.scala:1977)
at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
at scala.util.Try$.apply(Try.scala:213)
at sbt.internal.BackgroundThreadPool$BackgroundRunnable.run(DefaultBackgroundJobService.scala:367)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)
Expectation
- Expected output:
10 - Scala compiler version 3.3.3 is working correctly