【问题标题】:Akka.net Sender On non-actor contextAkka.net Sender On non-actor context
【发布时间】:2017-03-28 08:39:35
【问题描述】:

我的演员系统是在控制台应用程序上初始化的。我配置了一个名为 BankAccrountActor 的参与者,它负责处理银行账户交易,如账户的贷方/借方/账户余额。在贷记/借记命令中,参与者将从帐户和 Sender.Tell() 中贷记/借记剩余余额。从我的 program.cs 我打电话给 BankAccountActor 并要求借记并获得结果余额。

我的问题来自 BankAccountActor,它调用 Sender.Tell() 余额。这里 sender 是 IActorRef 类型,结果是程序类,程序不是演员。怎么可能?

namespace BankAccount
{
class Program
{
    static void Main(string[] args)
    {
        ActorSystem actorSystem = ActorSystem.Create("BankAccountSystem");
        Props bankAccountAccProps = Props.Create<BankAccountActor>();
        IActorRef bankAccActor = actorSystem.ActorOf(bankAccountAccProps, "abc");

        var remainBalance = bankAccActor.Ask<decimal>(new DebitAccMessage(100)).Result;
    }
}
internal class BankAccountActor : ReceiveActor
{
    private decimal _accBalance = 100;
    public BankAccountActor()
    {
        Receive<DebitAccMessage>(message => Debit(message));
        Receive<CreditAccMessage>(message => Credit(message));
    }
    public void Debit(DebitAccMessage debitMessage)
    {
        _accBalance += debitMessage.Amount;

        Sender.Tell(_accBalance);
    }
    public void Credit(CreditAccMessage debitMessage)
    {
        _accBalance -= debitMessage.Amount;

        Sender.Tell(_accBalance);
    }
}
internal class CreditAccMessage
{
    public CreditAccMessage(decimal amount)
    {
        Amount = amount;
    }
    public decimal Amount { get; private set; }
}
internal class DebitAccMessage
{
    public DebitAccMessage(decimal amount)
    {
        Amount = amount;
    }
    public decimal Amount { get; private set; }
}

}

【问题讨论】:

    标签: c# akka akka-http akka.net akka.net-cluster


    【解决方案1】:

    之所以有效,是因为在后台,Ask 创建了一个仅用于接收一条消息的参与者实例,即预期的答案。

    【讨论】:

    • 你在这里指的是什么类型的演员实例?
    • @AmalShalika 我不了解 .net,但在 scala 中它是 PromiseActorRef,您应该查看来源以找出答案!查看来源永远不会受到伤害...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    • 2020-04-26
    • 2016-06-08
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    相关资源
    最近更新 更多