簡體   English   中英

Akka.net Sender關於非演員的背景

[英]Akka.net Sender On non-actor context

我的actor系統在控制台應用程序上初始化。 我配置一個演員呼叫BankAccrountActor,負責處理銀行賬戶交易,如賬戶的信用卡/借記卡/賬戶余額。 在信用/借記命令中,參與者將從賬戶和Sender.Tell()中獲得信用/借記金額,余額為余額。 從我的program.cs我打電話給BankAccountActor請求借記並與結果保持平衡。

對我來說問題來自BankAccountActor,它調用Sender.Tell()並保持平衡。 這里sender是IActorRef類型,結果是程序類,程序不是actor。 怎么可能?

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; }
}

}

它的工作原理是因為在引擎蓋下, Ask創建了一個僅用於接收一條消息的actor實例,即預期的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM