2014-12-01 18 views
6

Çok basit bir Maven spring MVC projem var ve ona Scala ekledim. Aşağıdaki üç geleceğin eşzamanlı olarak yürütmeleri gerektiği gibi olmasını istiyorum. diğerScala Futures paralel çalışmıyor

ardına yürütmek Ancak
val viewName: Future[String] = for { 
    profileSync <- Future { EmployeeLocalServiceUtil.syncProfileInformation() } 
    earningsSync <- Future { EmployeeLocalServiceUtil.syncEarnings() } 
    reimbursementSync <- Future { EmployeeLocalServiceUtil.syncReimbursements() } 
} yield { 
    "employee/view" 
} 

Makinem 4 çekirdeğe sahip ve ben scala.concurrent.ExecutionContext.Implicits.global bağlamını kullanıyorum. Bunun dışında, vadeli işlemlerin paralel olarak yürütülmesini engelleyen/sağlayan bir düzenleme yoktur.

cevap

8

Anlamak için sadece sözdizimsel şeker ve translated to flatMap like in Example 2.

Future { ??? }.flatMap { profileSync => 
    Future { ??? }.flatMap { earningsSync => 
    Future { ??? }.map { reimbursementSync => 
     // Able to access profileSync/earningsSync/reimbursementSync values. 
     "employee/view" 
    } 
    } 
} 

Eğer Future ler yalnızca tamamlanan önceki sonrasında başlatılan ediliyor Gördüğünüz gibi: kodunuzu kabaca aşağıdaki gibi görünecektir anlamına

. bu ilk ardından Future s başlatmak ve etrafında almak için anlama için yapın:

val profileSyncFuture = Future { EmployeeLocalServiceUtil.syncProfileInformation()  } 
val earningsSyncFuture = Future { EmployeeLocalServiceUtil.syncEarnings()  } 
val reimbursementSyncFuture = Future { EmployeeLocalServiceUtil.syncReimbursements()  } 

val viewName: Future[String] = for { 
    profileSync <- profileSyncFuture 
    earningsSync <- earningsSyncFuture 
    reimbursementSync <- reimbursementSyncFuture 
} yield { 
    "employee/view" 
} 
+0

Teşekkür Akos açıklama. Daha önce anlamayı yanlış anlamıştım. – Robin