ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Future Traverse
    scala/cats2 2023. 2. 13. 12:39

    https://github.com/typelevel/cats/issues/4176 에서 처럼, cats-2.7 이후 부터는 더 이상 traverse 로 Future 가 동시에 수행되지 않는다.

     

    import cats.syntax.all._
    
    import scala.concurrent.ExecutionContext.Implicits.global
    import scala.concurrent.duration.Duration
    import scala.concurrent.{Await, Future}
    
    object TraverseTest {
      def main(args: Array[String]): Unit = {
        def f(n: Int): Future[Unit] = Future {
          Thread.sleep(1000L)
          println(n)
        }
    
        val list = (1 to 3).toList
        val x = list.traverse(f) // 이렇게 작성하지 말자!! sequential 수행으로 완료에 3초 이상 걸림 
    //    val x = list.map(f).sequence  // cats2 lib 을 사용한다면 이렇게 작성하거나
    //    val x = Future.traverse(list)(f)  // stdlib 의 Future.traverse 를 사용해야 함
    //  혹은 https://github.com/alexklibisz/futil#parallelism 를 이용하도록 하자!!
        Await.result(x, Duration.Inf)
      }
    }

     

    'scala > cats2' 카테고리의 다른 글

    Eval and Trampolining  (0) 2023.07.29
    Ior  (1) 2023.01.29
    Cats2 Exercise  (0) 2023.01.22
    Validated  (0) 2023.01.19
    Writer  (0) 2023.01.19

    댓글

Designed by Tistory.