का जवाब देते समय अक्का ने रैपिंग भविष्य से परहेज किया, मैं अक्का 2 के साथ एक छोटा कैशिंग अभिनेता बना रहा हूं और अभिनेता को ब्लॉक नहीं करने के लिए मैं वायदा के अंदर सभी गणना करता हूं। हालांकि एक समस्या यह है कि इस अभिनेता को ऐसे कोड के साथ बातचीत करने की भी आवश्यकता है जो खुद अभिनेता में नहीं है, ताकि मुझे मूल्य प्राप्त करने के लिए "पूछने" पैटर्न का उपयोग करने की आवश्यकता हो।गैर-अभिनेता कोड
मेरा सवाल है, मैं पूछताछ पैटर्न का उपयोग करते समय किसी अन्य भविष्य के अंदर अपनी गणना के भविष्य को लपेटने से कैसे बचूं?
उदाहरण के लिए
val f = myCache ? GetOrCalc("myKey", myCalculation) // this will be a Future[Future[...]] but I would like a Future[...]
// meanwhile, inside the actor
def receive = {
case GetOrCalc(key, calculation) =>
if (keyNotExists) sender ! Future { calculation() } // calculation() is long-running
else sender ! cacheMap(key)
}
आदर्श रूप में मैं Future.pipeTo समारोह इस्तेमाल कर सकते हैं लेकिन मुझे डर है इस गैर अभिनेता कोड के लिए एक "प्रतिक्रिया" के रूप में गिना नहीं प्राप्त करता हूँ
आश्चर्यजनक रूप से, यह वही है जो मेरे मूल छद्म कोड में था और मैंने इसका परीक्षण भी नहीं किया क्योंकि मुझे लगता है कि पाइप "प्रतिक्रिया" के रूप में काम नहीं करेगा। परीक्षण और परीक्षण करने के लिए मुझे यही मिलता है! यद्यपि सच्चाई बताई जा सकती है कि जैसा कि मैंने उपर्युक्त उल्लेख किया है, यह व्यवहार दस्तावेज़ों में नहीं है। बहुत बहुत विक्टर धन्यवाद! – Aktau
क्लैंग पर भरोसा करें –
मैं सोच रहा हूं कि "पाइप टू प्रेषक" सुरक्षित रूप से प्रेषक तक कैसे पहुंच रहा है। मैं समझता हूं कि आप भविष्य में प्रेषक से क्यों नहीं पहुंच सकते हैं, लेकिन पाइप कैसे आते हैं प्रेषक के पास एक ही समस्या नहीं है। क्या ऐसा इसलिए है क्योंकि पाइप भविष्य के पूरा होने से पहले अभिनेता के संदर्भ में प्रेषक का मूल्यांकन करता है? –