【问题标题】:ReceiveActor Receive<T> in Akka.net is not workingAkka.net 中的 ReceiveActor Receive<T> 不起作用
【发布时间】:2020-11-10 23:21:26
【问题描述】:

我是 Akka.net 的新手,我在 linux 上运行并使用 .NET Core 3.1,我编写了一个非常简单的代码,但它不起作用,我不知道为什么。

这是我的 program.cs,我在其中创建了 ActorSystem 并简单地调用了另一个演员

using Akka.Actor;

namespace PBFT
{
    class Program
    {
        static void Main(string[] args)
        {
            
            var MyActorSystem = ActorSystem.Create("ActorSystem");
            var Primary = MyActorSystem.ActorOf<PrimaryActor>();

            Primary.Tell("Test");
        }
    }
}

这是第一个应该接收消息并将其简单地输出到控制台的参与者

using Akka.Actor;
using Akka;
using Akka.Event;

namespace PBFT
{
    class PrimaryActor : ReceiveActor
    {
        private readonly ILoggingAdapter log = Context.GetLogger();
        public PrimaryActor()
        {
            Receive<string>(message => System.Console.WriteLine(message));
        }
    }
}

问题是没有错误并且消息没有被 Actor 处理,我错过了什么吗?

【问题讨论】:

    标签: c# .net-core actor akka.net


    【解决方案1】:

    Akka.NET 中参与者之间的消息是异步传递的。在您的示例中发生的情况是,您正在 Tell向演员发送消息并在之后立即退出程序,然后演员有机会处理该消息。

    您可以在您的示例中暂停主线程(使用例如Console.ReadLine()),或者 - 如果您需要确保演员在继续之前处理了消息 - 在调用方使用 actor.Ask(message, cancellationToken) 的组合(这将返回任务,一旦actor发送回响应就完成)和Sender.Tell(response)在你的actor的接收方法中:

    class PrimaryActor : ReceiveActor
    {
        private readonly ILoggingAdapter log = Context.GetLogger();
        public PrimaryActor()
        {
            Receive<string>(message => {
                System.Console.WriteLine(message);
                Sender.Tell(new object()); // or any other response you want
            });
        }
    }
    
    class Program
    {
        static async Task Main(string[] args)
        {
            
            var MyActorSystem = ActorSystem.Create("ActorSystem");
            var Primary = MyActorSystem.ActorOf<PrimaryActor>();
    
            await Primary.Ask<object>("Test", default(CancellationToken));
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-18
      • 1970-01-01
      • 1970-01-01
      • 2020-06-15
      • 1970-01-01
      • 2016-01-22
      • 1970-01-01
      相关资源
      最近更新 更多