从scalaz中的队列创建进程

从scalaz中的队列创建进程,scala,scalaz,scalaz-stream,Scala,Scalaz,Scalaz Stream,我试着按照第一个例子 在以下代码中填充一些空白并添加一些调试打印: import java.util.concurrent.ScheduledExecutorService import scala.concurrent.{Await, Future} import scala.concurrent.duration._ import scalaz.concurrent.Task import scalaz.stream.async.mutable.Queue import scalaz.str

我试着按照第一个例子

在以下代码中填充一些空白并添加一些调试打印:

import java.util.concurrent.ScheduledExecutorService
import scala.concurrent.{Await, Future}
import scala.concurrent.duration._
import scalaz.concurrent.Task
import scalaz.stream.async.mutable.Queue
import scalaz.stream.{Process, Sink}

object ProcessTest {

  def main(args: Array[String]): Unit = {
    import scala.concurrent.ExecutionContext.Implicits.global
    import scalaz.stream.async

    val q: Queue[Int] = async.unboundedQueue[Int]
    val src: Process[Task, Int] = q.dequeue

    // Thread 1
    val f1 = Future {
      for (i <- 0 to 10) {
        println(s"enqueueOne $i")
        Thread.sleep(100)
        q.enqueueOne(i)
      }
      println("closing")
      q.close
      println("closed")
    }

    // Thread 2
    val f2 = Future {
      val buf = new collection.mutable.ArrayBuffer[Int]
      val snk: Sink[Task, Int] = scalaz.stream.io.fillBuffer(buf)
      val run: Task[Unit] = src.map(x => {
        println(s"map $x")
        x
      }).to(snk).run
      println("running")
      run.get.runFor(3.seconds)
      println(s"result = ${buf.toList}")
    }

    Await.result(f1, 10.seconds)
    Await.result(f2, 10.seconds)
  }
}
我做错了什么? 这个街区在哪里


(我正在使用scalaz stream 0.8.6)

好的,我发现了问题:
enqueueOne
close
返回任务,这些任务必须运行:

// Thread 1
val f1 = Future {
  for (i <- 0 to 10) {
    println(s"enqueueOne $i")
    Thread.sleep(100)
    q.enqueueOne(i).run
  }
  println("closing")
  q.close.run
  println("closed")
}
//线程1
val f1=未来{
为了
// Thread 1
val f1 = Future {
  for (i <- 0 to 10) {
    println(s"enqueueOne $i")
    Thread.sleep(100)
    q.enqueueOne(i).run
  }
  println("closing")
  q.close.run
  println("closed")
}