Akka.net 中的 ReceiveActor Receive<T> 不工作
ReceiveActor Receive<T> in Akka.net is not working
我是 Akka.net 的新手,我是 linux 上的 运行 并使用 .NET Core 3.1,我编写了一个非常简单的代码,但它不起作用,我不知道为什么.
这是我的 program.cs 我在其中创建了 ActorSystem 并简单地调用了另一个 actor
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 处理,我是不是遗漏了什么?
Akka.NET 中参与者之间的消息是异步传递的。在您的示例中,您正在 Tell
向演员发送消息并在演员有机会处理消息之前立即退出程序。
您可以在您的示例中挂起主线程(例如使用 Console.ReadLine()
),或者 - 如果您需要确保 actor 在继续之前处理了消息 - 使用 [=13= 的组合] 在调用方(这将 return 任务,一旦演员发回响应就完成)和 Sender.Tell(response)
在演员的接收方法中:
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));
}
}
我是 Akka.net 的新手,我是 linux 上的 运行 并使用 .NET Core 3.1,我编写了一个非常简单的代码,但它不起作用,我不知道为什么.
这是我的 program.cs 我在其中创建了 ActorSystem 并简单地调用了另一个 actor
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 处理,我是不是遗漏了什么?
Akka.NET 中参与者之间的消息是异步传递的。在您的示例中,您正在 Tell
向演员发送消息并在演员有机会处理消息之前立即退出程序。
您可以在您的示例中挂起主线程(例如使用 Console.ReadLine()
),或者 - 如果您需要确保 actor 在继续之前处理了消息 - 使用 [=13= 的组合] 在调用方(这将 return 任务,一旦演员发回响应就完成)和 Sender.Tell(response)
在演员的接收方法中:
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));
}
}