scala अक्का अभिनेता पूछें और टाइप करें सुरक्षा




asynchronous akka (2)

मैं कैसे Akka अभिनेता का उपयोग कर सकते हैं पूछो और प्रकार की सुरक्षा बनाए रखने? या कहने के पक्ष में पूछने से बचें?

जब फोन कर रहा है ? या एक अक्का अभिनेता से ask , एक Future[Any] वापस कर दिया गया है और मुझे Future[Any] माध्यम से एक स्पष्ट future.mapTo[MyType]future.mapTo[MyType]

मुझे इस प्रकार की सुरक्षा को खोना पसंद नहीं है I अगर मैं फ़्यूचर्स का उपयोग सीधे (कोई अभिनेता के साथ नहीं) मैं स्पष्ट रूप से Future[MyType] वापस कर सकता हूं और प्रकार सुरक्षा को बनाए रख सकता हूं I

मेरे विशिष्ट उपयोग के मामले में एक अभिनेता को दो बच्चे के कलाकारों के लिए संदेश देने का काम करना होता है और फिर उन अभिनेताओं के परिणामों को एकत्र करना और माता-पिता के प्रेषक को लौटाना। मेरे माता पिता की विधि अक्का डॉक्स में इस दृष्टिकोण के समान दिखती है:

http://doc.akka.io/docs/akka/2.0/scala/futures.html#For_Comprehensions

val f1 = actor1 ? msg
val f2 = actor2 ? msg

val f3 = for {
  a ← f1.mapTo[Int]
  b ← f2.mapTo[Int]
  c ← ask(actor3, (a + b)).mapTo[Int]
} yield c

क्या मेरे उपयोग के मामले को हासिल करने का एक बेहतर तरीका है?


मैं एक नया जवाब पोस्ट करना चाहता था क्योंकि @ रॉलेंड कुहने ने हाल ही में इस टाइप टाइप चैनल के लिए एक नया समाधान प्रस्तुत किया है:

val f: Future[MyType] = actor <-?- message

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

टाइप किए गए अभिनेता अलग, दृढ़ता से टाइप किए गए रिटर्न मान (ऊपर वर्णित दस्तावेज़ों से) के तरीकों पर वापस लौट सकते हैं:

def squareDontCare(i: Int): Unit //fire-forget

def square(i: Int): Future[Int] //non-blocking send-request-reply

def squareNowPlease(i: Int): Option[Int] //blocking send-request-reply

def squareNow(i: Int): Int //blocking send-request-reply

ये विधि tell जबकि बाकी लोग ask विभिन्न प्रकार ask







future