假设我正在为Akka(类型化)执行元定义一个行为,该行为将执行并发计算,将其结果报告给生成它的执行元,然后停止。
如果我用计算的所有输入初始化这个actor,加上对它的“父级”的引用,那么它将永远不需要接收任何类型的传入消息。
我将使用Behaviors.setup
创建此行为,向它传递一个执行计算的函数,然后返回Behaviors.Stopped
。
Akka(Typed)要求我为将返回此行为的函数提供某种行为[T]
的结果类型。虽然我可以为t
分配行为将发送的结果消息的类型,但这似乎不正确。t
不是用来约束参与者可以接收的消息吗?因此,如果我根据参与者将发送的消息类型定义t
,我不是在对编译器“撒谎”吗?
事实上,这种行为不能--也不会--处理任何传入的消息。
是否有一个更正确的类型,我可以分配给这个行为?
还是我不知何故错过了类型化演员行为的要点?
在下面的代码中,我的apply
返回行为[Result]
,但这是一个谎言。它永远不会接收或处理result
消息。(它只会发送一个。)
import akka.actor.typed.{ ActorRef, Behavior }
import akka.actor.typed.scaladsl.Behaviors
object ConcurrentComputation {
sealed trait Result
final case class Success( result : Double ) extends Result
final case class Failure( exception : Throwable ) extends Result
def apply(
argX : Double,
argY : Double,
parent : ActorRef[ Result ]
) : Behavior[ Result ] = Behaviors.setup(
context => {
try {
Success( compute( argX, argY ) )
}
catch {
case e : Throwable => Failure( e )
}
Behaviors.stopped
}
)
// Never mind what's actually being done.
def compute( x : Double, y : Double ) : Double = ???
}
到目前为止,我提出的最好的方法是behavior[Any]
。
这是糟糕的语义,因为它表达的是代码意图的相反。
实际上,我不认为它会损害代码的执行,因为没有消息可以由行为处理或处理。
更好的答案是受欢迎的。
一般情况下,它是使用的行为。对于不接收任何消息的行为设置[Nothing]。假设一个演员接收消息,但有时他们没有。例如,当您创建一个Akka类型的ActorSystem时,您需要为user guardian actor提供一个行为,该actor不会接收任何消息,您将该actor的行为创建为Behavior[Nothing]。
此类型表示此执行元不能接收任何消息,因为“不存在此类型的实例”(Nothing类型)。
我正在创建一个使用Java+阿卡的演员系统。特别是,我通过提供onReceive()方法的实现来定义非类型化的参与者。 在该方法中,我通过定义接收消息时要执行的逻辑来实现参与者的行为。它可能是: 但是,如果演员只对单一类型的味精感兴趣呢?有没有可能实现选择性接收,使参与者等待某个消息(系统自动重新排队所有其他类型的消息)???
我试图用akka-http测试一个TypedActor,但在尝试创建测试用例时遇到了一些问题。为了测试TypedActor,我将编写以下规范... 但是,当我必须编写一个与HTTP/+WS路由一起使用的TypedActor时,我无法编写... 我如何才能编写一个同时使用这两种测试呢? 请指教。
我正在尝试从服务器获取json数据
我正在开发我的flutter应用程序的身份验证。请帮我解决这个问题。我无法识别返回这样一个错误的问题,声明未处理异常:类型列表不是类型字符串的子类型。 以下是登录屏幕的代码: 执行登录的上述代码部分: 错误
更新:感谢@Rjulcaa回答我的地图现在是一个列表,但是列表没有显示在用户界面上。我转过来,我需要用FutureBuilder来处理未来,所以如果有人面临这个问题,记得在你的用户界面主体中添加一个FutureBuilder,并在构建器上返回你想要显示的小部件。 我正在制作一个todo列表教程,我正在尝试添加JSON上的编码功能,我的todoList将其保存在SharedReferences上,当