2011-04-13 26 views

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.

Các vấn đề liên quan