2011-04-13 15 views
7

जब मैं स्काला भविष्य के परिणाम के लिए इंतजार , यह व्यवहार करते है प्राप्त अधिक पसंद करते हैं या की तरह प्रतिक्रिया है, यानी यह एक धागा, या कार्यक्रम एक निरंतरता परिणाम के बाद यदि उपलब्ध ब्लॉक करता है?स्कैला फ्यूचर ब्लॉक थ्रेड पर इंतजार है?

उत्तर

15

हां, stdlib में यह थ्रेड को अवरुद्ध करता है, और सिंक्रनाइज़ रूप से परिणामों की प्रतीक्षा करता है। यदि आप वायदा के लिए निरंतरता-गुजरने वाली शैली को लागू करना चाहते हैं, तो आपको अक्का या स्कालाज़ का उपयोग करना होगा जो सीधे बॉक्स से वायदा पूरा करने पर हुक जोड़ने की अनुमति देता है।

Akka:

val f1 = Future { Thread.sleep(1000); "Hello" + "World" } 

val f2 = f1 map { _.length } 

f2 foreach println //Done asynchronously and non-blocking 

ही 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

इसे वर्तमान धागे को अवरुद्ध करना चाहिए, लेकिन क्या कार्यकर्ता थ्रेड अवरुद्ध है, यह निर्भर करता है।

संबंधित मुद्दे