okudum: Bu olay kaydeder parçacığı üzerinde çalışmaz tekrar-print deyimi vurgulamak önemlidirScala futures - hangi iş parçacığı üzerinde çalışır? Jason Goodwin tarafından Öğrenme Akka ise
val future = getUsernameFromDatabaseAsync(userId)
future.onComplete(username =>
//executed somewhere else
println(username)
)
Ve meraktan kendim kontrol etmek istedim, bu yüzden bir pasajı hazırlanan:. ExecutionContext aracılığıyla başka bir iş parçasında başka bir yerde çalışır. Vadeler her zaman ExecutionContext ile oluşturulur, böylece bunları çalıştırmak için nerede seçebilirsiniz.
val myFuture = Future {
println("in future: " + Thread.currentThread().getName())
Thread.sleep(1000)
}
myFuture.onComplete {
case _ ⇒ println("in onComplete: " + Thread.currentThread().getName())
}
println("main: " + Thread.currentThread().getName())
Await.result(myFuture, 10 seconds)
aşağıdaki çıktıyı ben parçacığını çalıştırmak her zaman olsun.
main: main
in future: ForkJoinPool-1-worker-13
in onComplete: ForkJoinPool-1-worker-13
Gelecek ve onComplete aynı iş parçacığı üzerinde yürütülen, ancak kitap onComplete farklı bir iş parçacığı üzerinde geri yürütmek olabileceğini söylüyor edilir. Nasıl açıklanır?