首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ZIO调度简单示例

ZIO调度简单示例
EN

Stack Overflow用户
提问于 2019-11-22 13:01:20
回答 1查看 1.1K关注 0票数 1

我想玩ZIO时间表和重试,但找不到完成的例子。下面的代码(IDEA中的研讨会)怎么样:

代码语言:javascript
复制
import zio._
import zio.duration._
import zio.console._

val r = scala.util.Random

def funcReadFromDb(inp :Int): Task[Seq[Int]]= {
  val rnd :Int = r.nextInt(10)
  println(s"rnd=$rnd")
  //if (rnd <= 5)
    Task.succeed(Seq(inp, inp * 2, inp * 3))
  //else Task.fail(new Exception("custom exception"))
}

val spaced :zio.Schedule[zio.clock.Clock with Console,Any,Int] = Schedule.spaced(1.second)

val schedEff = for {
  s <- funcReadFromDb(3).repeat(spaced)
  _ <- putStrLn(s"s=$s")
} yield ()

val runtime = new DefaultRuntime {}
runtime.unsafeRun(schedEff)

我希望得到一些间隔为1秒的迭代输出。并输出以下内容:

代码语言:javascript
复制
spaced: zio.Schedule[zio.clock.Clock with zio.console.Console,Any,Int] = zio.Schedule$$anon$18@535bf6e0

rnd=4
schedEff: zio.ZIO[zio.clock.Clock with zio.console.Console,Throwable,Unit] = zio.ZIO$FlatMap@63303dbf

runtime: zio.DefaultRuntime = $anon$1@3e661711
EN

回答 1

Stack Overflow用户

发布于 2019-11-22 17:31:07

funcReadFromDb不是纯的。nextIntprintln是特效,必须包装到Task body中。

代码语言:javascript
复制
def funcReadFromDb(inp :Int): Task[Seq[Int]]= {
    Task.effect {
      val rnd: Int = r.nextInt(10)
      println(s"rnd=$rnd")
      Seq(inp, inp * 2, inp * 3)
    }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58987802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档