var num =0
var num2 = 3333
val p2 = Process.eval {
Thread.sleep(10000)
Task.delay {
Thread.sleep(10000)
num2 = num2 + 1
s"hi ${num2}"
}
}.repeat.take(15)
//p2: scalaz.stream.Process[[x]scalaz.concurrent.Task[x],String] =
// Await(scalaz.concurrent.Task@5a554f1c,
//<function1>,Halt(scalaz.stream.Process$End$),Halt(scalaz.stream.Process$End$))
val p1 = Process.eval {
Thread.sleep(2000)
Task.delay {
Thread.sleep(2000)
num = num + 1
s"hi $num"
}
}.repeat.take(15)
//p1: scalaz.stream.Process[[x]scalaz.concurrent.Task[x],String] =
// Await(scalaz.concurrent.Task@7a54e904,
// <function1>,Halt(scalaz.stream.Process$End$),Halt(scalaz.stream.Process$End$))
// this interleaves them and I get disjunctions showing me their order
(p1 either p2).map(println).run.run
// this gives me the strings that are interleaved
(p1 interleave p2).map(println).run.run
您如何获得一个由 2 个进程组合而成的进程,但无论它们到达的顺序如何(这意味着如果左边在右边之前两次,没关系,给左边两次,然后当右边到达时发出它)?
我正在寻找睡眠时间较短的睡眠更频繁地发生,并在较慢的过程之前看到它多次出现。提前感谢任何花时间阅读本文的人,尤其是那些可以分享一些见解的人。