[英]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.