控制进程的吞吐量
Controlling the throughput of a Process
我正在尝试使用计时器 Process
来控制 Process[F, A]
的吞吐量:
val p: Process[List,Int] = Process.iterateEval(0)(i => List(i + 1))
val timer: Process[Task, Duration] = time.awakeEvery(1 second)(Strategy.DefaultStrategy, Strategy.DefaultTimeoutScheduler)
val p2 = p.zipWith(timer)((v, d) => v)
但是编译器说 p2
是 Process[Object, Int]
。根据zipWith()
签名,应该是Process[Task, Int]
.
如果 F
不是 Task
,我如何限制 Process[F, A]
的输出?我试过 sleepUntil()
但我遇到了类似的问题。
没有理由说 F
只是一个 effect full monad,比如 Task
。如果您的代码不需要任何效果,那么您可以使用像 Process0 (Process[Nothing,O]) 这样的类型流程。
如果您更改代码,您的代码将完全正常工作
val p: Process[Task,Int] = Process.iterateEval(0)(i => Task.now(i + 1)))
或者如果 f
传递给 iteateEval 是纯粹的,只是简单地
val p : Process0[Int] = Process.iterate(0)(i => i + 1)
我正在尝试使用计时器 Process
来控制 Process[F, A]
的吞吐量:
val p: Process[List,Int] = Process.iterateEval(0)(i => List(i + 1))
val timer: Process[Task, Duration] = time.awakeEvery(1 second)(Strategy.DefaultStrategy, Strategy.DefaultTimeoutScheduler)
val p2 = p.zipWith(timer)((v, d) => v)
但是编译器说 p2
是 Process[Object, Int]
。根据zipWith()
签名,应该是Process[Task, Int]
.
如果 F
不是 Task
,我如何限制 Process[F, A]
的输出?我试过 sleepUntil()
但我遇到了类似的问题。
没有理由说 F
只是一个 effect full monad,比如 Task
。如果您的代码不需要任何效果,那么您可以使用像 Process0 (Process[Nothing,O]) 这样的类型流程。
如果您更改代码,您的代码将完全正常工作
val p: Process[Task,Int] = Process.iterateEval(0)(i => Task.now(i + 1)))
或者如果 f
传递给 iteateEval 是纯粹的,只是简单地
val p : Process0[Int] = Process.iterate(0)(i => i + 1)