scala स्काला में अक्का, विस्मयादिबोधक चिह्न और प्रश्न चिह्न




operators akka (2)

अभिनेताओं को संदेश भेजते समय विस्मयादिबोधक चिह्न ( ! ) और प्रश्न चिह्न ( ? ) के बीच क्या अंतर है?

myActor ! Hello(value1)
myActor ? Hello(value1)

प्राप्तकर्ता के दृष्टिकोण से, यह संदेशों को उसी तरह tell और ask । हालाँकि, जब कोई संदेश प्राप्त करता है tell sender का मूल्य संदेश भेजने वाले अभिनेता का संदर्भ होगा, जबकि ask , sender को इस तरह सेट किया जाता है कि कोई भी उत्तर उस अभिनेता में बनाए गए Future जाता है, जिसने पूछा था।

ask में एक फायदा है, कि यह जानना आसान है कि जो प्रतिक्रिया आप प्राप्त कर रहे हैं वह निश्चित रूप से आपके द्वारा पूछे गए संदेश का परिणाम है, जबकि टेल के साथ, आपको समान परिणाम प्राप्त करने के लिए अद्वितीय आईडी का उपयोग करने की आवश्यकता हो सकती है। हालाँकि ask साथ आपको एक timeout सेट करने की आवश्यकता है जिसके बाद यदि कोई प्रतिक्रिया नहीं मिली तो Future विफल हो जाएगा।

नीचे दिए गए कोड में, एक ही प्रभाव एक tell और ask साथ प्राप्त किया जाता है।

import akka.actor.{Props, Actor}
import scala.concurrent.duration._
import akka.pattern.ask

class TellActor extends Actor {

  val recipient = context.actorOf(Props[ReceiveActor])

  def receive = {
    case "Start" =>
      recipient ! "Hello" // equivalent to recipient.tell("hello", self)

    case reply => println(reply)
  }
} 

class AskActor extends Actor {

  val recipient = context.actorOf(Props[ReceiveActor])

  def receive = {
    case "Start" =>
      implicit val timeout = 3 seconds
      val replyF = recipient ? "Hello" // equivalent to recipient.ask("Hello")
      replyF.onSuccess{
        case reply => println(reply)
      }
  }
}

class ReceiveActor extends Actor {

  def receive = {
    case "Hello" => sender ! "And Hello to you!"
  }
}

बेशर्मी से नकल की गई [भयानक] आधिकारिक डॉक्टर (अधिक के लिए संदेश भेजें अनुभाग देखें):

निम्न विधियों में से एक के माध्यम से एक अभिनेता को संदेश भेजे जाते हैं।

! "आग-और-भूल" का अर्थ है, उदाहरण के लिए एक संदेश भेजें अतुल्यकालिक और तुरंत वापस। के रूप में भी जाना जाता tell

? एक संदेश को असिंक्रोनस तरीके से भेजता है और संभावित उत्तर का प्रतिनिधित्व करते हुए Future देता है। भी ask रूप में जाना जाता ask





actor