代码之家  ›  专栏  ›  技术社区  ›  Kumar Waghmode

在scala cats的后台线程上运行IO

  •  1
  • Kumar Waghmode  · 技术社区  · 5 年前
    def backGroundTask:IO[Unit]={
    IO
    {
    //Time consuming task
    }
    }
    

    如何在后台线程上急切地执行这个任务?

    1 回复  |  直到 5 年前
        1
  •  2
  •   Krzysztof Atłasik    5 年前

    你可以使用 ContextShift.evalOn :

    def backGroundTask = IO {
          Thread.currentThread()
    }
    
    val contextShift: ContextShift[IO] = IO.contextShift(ExecutionContext.global)
    
    val ec = ExecutionContext.fromExecutor(Executors.newCachedThreadPool()) //create other execution context
    
    println(backGroundTask.unsafeRunSync()) // will print Thread[main,5,main]
    println(contextShift.evalOn(ec)(backGroundTask).unsafeRunSync()) //will print Thread[pool-1-thread-1,5,main]