Khi tôi chờ cho kết quả của Scala tương lai, nó cư xử giống như nhận, hoặc như phản ứng, ví dụ nó chặn một chủ đề, hoặc lịch sự tiếp nối sau khi kết quả nếu có?Có phải chờ đợi chuỗi chủ đề Scala Future không?
7
A
Trả lời
15
Có, trong stdlib nó chặn chuỗi và đồng bộ chờ kết quả. Nếu bạn muốn áp dụng phong cách tiếp tục chuyển tiếp cho tương lai, bạn phải sử dụng Akka hoặc Scalaz cho phép thêm móc vào tương lai hoàn thành ngay từ hộp.
Akka:
val f1 = Future { Thread.sleep(1000); "Hello" + "World" }
val f2 = f1 map { _.length }
f2 foreach println //Done asynchronously and non-blocking
Cùng với Scalaz:
scala> val f1 = promise {Thread.sleep(1000); "Hello" + "World"}
f1: scalaz.concurrent.Promise[java.lang.String] = [email protected]
scala> val f2 = f1 map{str => str.length}
f2: scalaz.concurrent.Promise[Int] = [email protected]
scala> f2.map(println)
10
res5: scalaz.concurrent.Promise[Unit] = [email protected]
1
Nó sẽ chặn luồng hiện tại, nhưng liệu chuỗi công nhân có bị chặn hay không, nó phụ thuộc.