sorun, yürütme olduğunuzu olduğunu asıl bağımsız bir program olarak iş parçacığı iş parçacıklarından biri "Merhaba gelecek" i yürütmeden önce iş parçacığı sona eriyor println
. (Yeni gelecek kütüphanesinin geliştirdiği konular daemon konularıdır). o Alo" yazdırabilirsiniz,
Test print before future
Test print after future
Hello future!
Veya:
import scala.concurrent._
import scala.concurrent.util._
object Test {
def main(args: Array[String]) {
println("Test print before future")
val s = "Hello"
val f = future {s + " future!"}
f onSuccess {case v => println(v)}
println("Test print after future")
Await.ready(f, Duration.Inf)
}
}
Bu yazdırabilirsiniz:
Ayrıca gelecek f
tamamlanana kadar beklemek (ayrıca scala.concurrent
olarak) Await
nesneyi kullanabilirsiniz gelecek!" İş parçacığı programına bağlı olarak "Gelecekte yazdırmayı sınama" dan önce.
import scala.concurrent._
import scala.concurrent.util._
object Test {
def main(args: Array[String]) {
println("Test print before future")
val s = "Hello"
val f = future {s + " future!"}
f onSuccess {case v => println(v)}
Await.ready(f, Duration.Inf)
println("Test print after future")
}
}
basacaktır hangisi:
Test print before future
Hello future!
Test print after future
Ancak kullandığınızda unutmayın
Aynı şekilde, f
son println
önce tamamlanıncaya kadar aşağıdaki gibi beklemek ana iş parçacığı zorlayabilir Await
, engellediniz. Bu elbette, ana uygulama parçanızın sonlandırılmamasını sağlamak için mantıklıdır, ancak genellikle gerekli olmadıkça kullanılmamalıdır.
(Await
nesnesi, bunlar gibi durumlar için gerekli bir çıkış bölmesidir, ancak uygulama kodu boyunca anlamını kaygı duymadan kullanmak, daha yavaş, daha az paralel yürütme ile sonuçlanabilir. Belirtilen sipariş, örneğin, Future
'da andThen
ve map
yöntemleri gibi başka alternatifler vardır.
Biliyor musunuz? Bunun hakkında düşündüm çünkü goroutines ile uğraşırken aynı yoldaydı: Ana bloğu kapatmadan önce goroutines tarafından gönderilen bir mesajı beklemek için kanalları kullanıyorsunuz. –
@Heather Birden fazla geleceği beklemek mümkün mü? – 66CLSjY