Scala 未来调用命令和自定义执行器
我遇到了一个问题,执行器没有关闭,第二个未来调用在最后一个未来调用之后执行,并且程序没有终止Scala 未来调用命令和自定义执行器,scala,tail-recursion,Scala,Tail Recursion,我遇到了一个问题,执行器没有关闭,第二个未来调用在最后一个未来调用之后执行,并且程序没有终止 import java.util.concurrent.Executors import scala.concurrent.ExecutionContext val customExecutor: ExecutorService = Executors.newFixedThreadPool(serviceConfig.serviceConf.numberOfThreads)
import java.util.concurrent.Executors
import scala.concurrent.ExecutionContext
val customExecutor: ExecutorService =
Executors.newFixedThreadPool(serviceConfig.serviceConf.numberOfThreads)
implicit val customExecutionContext: ExecutionContext =
ExecutionContext.fromExecutor(Executors.newFixedThreadPool(10))
val remainingRecords = data.foldLeft(Seq.empty[Int]) {
case (a, b) =>
fetchAllData()
.foldLeft(c) {
case (a, file) =>
sendInBatches(a)
}
}
@scala.annotation.tailrec
def sendData(res: Seq[Int]) = {
...
futureCall() map { result =>
logger.info(
s"Successfully Executed"
)
}
sendData()
}
if (remainingRecords.nonEmpty) {
futureCall() map { result =>
logger.info(
s"Successfully executed the remaining"
)
customExecutor.shutdown()
}
}
我得到日志“成功执行剩余的”,然后“成功执行”,即使我手动关闭执行器,应用程序也不会停止。这是一个很长的过程,但以下代码:
def sendData(res: Seq[Int]) =
{
...
futureCall() map { result =>
logger.info(
s"Successfully Executed"
)
}
sendData()
}
永不终止executor.shutdown()
防止在线程池上调度新任务,但不会终止任何正在进行的任务,以允许正常关闭。因为这段代码正在运行,而且任务永远不会结束,所以执行者正在等待它完成,并且一直在等待
如果在递归调用
sendData()
之前通过添加一些检查来处理所有数据,则可以尝试使用shutdownNow()
和/或使此循环有效地结束,但此代码:
def sendData(res: Seq[Int]) =
{
...
futureCall() map { result =>
logger.info(
s"Successfully Executed"
)
}
sendData()
}
永不终止executor.shutdown()
防止在线程池上调度新任务,但不会终止任何正在进行的任务,以允许正常关闭。因为这段代码正在运行,而且任务永远不会结束,所以执行者正在等待它完成,并且一直在等待
您可以尝试使用
shutdownNow()
和/或在递归调用sendData()
之前通过添加一些检查来处理所有数据,从而有效地结束这个无限循环?很难判断此代码中的一些可疑内容是在逻辑上,还是在{}
中出现拼写错误。Mateusz Kubuszok,已修复。另外,我试图解决的问题是,你能修复int缩进吗?很难判断此代码中的一些可疑内容是在逻辑上,还是在{}
中出现拼写错误。Mateusz Kubuszok,已修复。另外,我试图解决的问题在“请看完整的场景”中说明。您所解释的代码绝对不会终止。对于完整的场景,请查看完整的场景。您所解释的代码绝对不会终止。有关完整场景,请参见