gpt4 book ai didi

scala - 有没有办法获得 scala.concurrent.ExecutionContext.global 的非全局克隆?

转载 作者:行者123 更新时间:2023-12-01 10:48:53 29 4
gpt4 key购买 nike

我正在寻找 ForkJoinPool 的非全局实例,这样我就可以获得全局实例的所有默认并行性和执行语义,并能够控制其生命周期游泳池。

我查看了 scala.concurrentscala.concurrent.impl 的源代码,遗憾的是,它看起来像是创建默认实例的所有代码是 private[scala.concurrent],也没有间接调用代码的方法。

我只能使用 ExecutionContext.fromExecutor(null) 获取具有默认设置的 ExecutionContext 的新实例,但无法获取底层 >ForkJoinPool。也没有办法直接关闭 ExecutionContext

我是否在做一些我不应该做的深奥的事情?因为对我来说,这似乎是很自然的事情:没有全局性的事物的默认语义/配置。

最佳答案

这不是访问的问题,而是形状的问题。大象的尾部:

scala> type ECI = { def createExecutorService: ExecutorService }
defined type alias ECI

scala> val fjp = ExecutionContext.global.asInstanceOf[ECI].createExecutorService
fjp: java.util.concurrent.ExecutorService = scala.concurrent.forkjoin.ForkJoinPool@606dff1[Running, parallelism = 8, size = 0, active = 0, running = 0, steals = 0, tasks = 0, submissions = 0]

或无形:

scala> import shapeless.syntax.typeable._
import shapeless.syntax.typeable._

scala> val fjp = concurrent.ExecutionContext.global.cast[ECI] map (_.createExecutorService) getOrElse ???
fcp: java.util.concurrent.ExecutorService = scala.concurrent.forkjoin.ForkJoinPool@45c26421[Running, parallelism = 8, size = 0, active = 0, running = 0, steals = 0, tasks = 0, submissions = 0]

然后

scala> val eces = ExecutionContext fromExecutorService fjp
eces: scala.concurrent.ExecutionContextExecutorService = scala.concurrent.impl.ExecutionContextImpl$$anon$1@1df3794c

scala> eces.shutdown

关于scala - 有没有办法获得 scala.concurrent.ExecutionContext.global 的非全局克隆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22883652/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com