मुद्दा यह है कि आप को क्रियान्वित कर रहे हैं कि एक स्टैंडअलोन कार्यक्रम, जिसका मुख्य रूप कार्यकर्ता धागे में से एक "हैलो भविष्य" निष्पादित कर सकता है इससे पहले थ्रेड समाप्त हो रहा है! println
। (थ्रेड जो नए वायदा लाइब्रेरी स्पॉन डिमन थ्रेड हैं)।
तुम भी Await
वस्तु (scala.concurrent
में भी) भविष्य f
के पूर्ण होने तक उपयोग कर सकते हैं प्रतीक्षा करने के लिए:
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)
}
}
यह मुद्रित कर सकते हैं:
Test print before future
Test print after future
Hello future!
या, यह "मुद्रित कर सकते हैं हैलो भविष्य! " थ्रेड शेड्यूल के आधार पर "भविष्य के बाद टेस्ट प्रिंट" से पहले।
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")
}
}
कौन सा प्रिंट होगा::
Test print before future
Hello future!
Test print after future
हालांकि, ध्यान दें कि आप का उपयोग करते हैं
इसी तरह, आप इस प्रकार जब तक f
पिछले println
से पहले पूरा हो गया है प्रतीक्षा करने के लिए मुख्य थ्रेड मजबूर कर सकते हैं Await
, आप अवरुद्ध कर रहे हैं। यह निश्चित रूप से यह सुनिश्चित करने के लिए समझ में आता है कि आपका मुख्य अनुप्रयोग धागा समाप्त नहीं होता है, लेकिन आम तौर पर अन्यथा आवश्यक होने तक इसका उपयोग नहीं किया जाना चाहिए।
(Await
ऑब्जेक्ट इन तरह की स्थितियों के लिए एक आवश्यक भागने वाला हैच है, लेकिन इसका उपयोग बिना किसी चिंता के चिंता के पूरे कोड कोड के परिणामस्वरूप धीमे, कम समांतर निष्पादन के परिणामस्वरूप हो सकता है। अगर आपको यह सुनिश्चित करना होगा कि कॉलबैक कुछ में निष्पादित हो निर्दिष्ट आदेश, उदाहरण के लिए, andThen
और map
विधियों जैसे Future
पर अन्य विकल्प हैं।)
आप जानते हैं? मैंने सोचा था कि इस कारण का कारण बिल्कुल उसी तरह है जब आप गोरोटाइन से निपट रहे हैं: आप मुख्य ब्लॉक को बंद करने से पहले गोरोटाइन द्वारा भेजे गए संदेश की प्रतीक्षा करने के लिए चैनल का उपयोग करते हैं। –
@ हेदर क्या एक से अधिक भविष्य के लिए इंतजार करना संभव है? – 66CLSjY