Scala cats IOApp应该如何获取ExecutionContext?

问题描述 投票:0回答:1

我最近将我的应用转换为继承IOApp所述的猫的here。我阅读了该文档:

Timer [IO]依赖项已由IOApp提供,因此JVM不再需要隐式的ExecutionContext在范围内

但是,我正在与确实需要ExecutionContext的其他几个库(即http4s)进行交互。是否有推荐的方法来获取这种类型的应用程序?好的import scala.concurrent.ExecutionContext.Implicits.global与提供的Timer[IO]玩起来不错吗?

scala scala-cats cats-effect
1个回答
0
投票

尝试扩展特征IOApp.WithContext

import java.util.concurrent.Executors
import cats.effect._
import cats.syntax.all._
import scala.concurrent.ExecutionContext

object Main extends IOApp.WithContext {

  implicit val ec = ExecutionContext.global
  // implicit val ec = ExecutionContext.fromExecutor(Executors.newFixedThreadPool(10))

  override protected def executionContextResource: Resource[SyncIO, ExecutionContext] =
    Resource.liftF(SyncIO(ec))

  def run(args: List[String]): IO[ExitCode] = {

    implicitly[Timer[IO]]
    implicitly[ContextShift[IO]]
    implicitly[ExecutionContext]

    ...
  }
}

https://github.com/typelevel/cats-effect/issues/337

https://github.com/typelevel/cats-effect/pull/344

© www.soinside.com 2019 - 2024. All rights reserved.