Mein Akteurs-System wird in der Konsolenanwendung initialisiert. Ich konfiguriere einen Akteur Call BankAccrountActor, der verantwortlich ist für Banktransaktionen wie Kredit/Debit/Kontostand eines Kontos. Bei Kredit-/Debit-Befehl wird der Actor den Betrag von Konto und Sender.Tell() mit dem Restguthaben gutschreiben/debitieren. Von meinem program.cs rufe ich BankAccountActor an, um nach Debit zu fragen und Balance mit Ergebnis zu erhalten.Akka.net Absender Nicht-Akteur-Kontext
Problem für mich ist von BankAccountActor ruft Sender.Tell() mit Balance. Hier ist Absender IActorRef Typen und Ergebnis kommt zu Programm-Klasse und Programm ist kein Akteur. Wie ist es möglich?
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; }
}
}
Auf welche Art von Akteursinstanz beziehen Sie sich hier? –
@AmalShalika Ich weiß nicht über .net, aber in Scala ist es 'PromiseActorRef', Sie sollten sich die Quellen anschauen, um herauszufinden! Es tut nie weh, die Quellen zu betrachten ... –