1

My actor system is initialized on console application. I configure one actor call BankAccrountActor which is responsible for handle bank account transaction like credit/debit/account balance of an Account. On credit/debit command the actor will credit/debit amount from account and Sender.Tell() with remaining balance. From my program.cs I call BankAccountActor with ask for debit and get balance with result.

Problem for me is from BankAccountActor it calls Sender.Tell() with balance. Here sender is IActorRef types and result is coming to program class and program is not an actor. How it be possible?

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

}

Amal Shalika
  • 1,077
  • 1
  • 13
  • 22

1 Answers1

0

It works because under the hood, Ask creates an actor instance that is only used to receive one single message, the expected answer.

Frederic A.
  • 3,504
  • 10
  • 17