1
私のアクターシステムはコンソールアプリケーションで初期化されます。私は1つのアクター・コールBankAccrountActorを構成します。このアクターは、口座のクレジット/デビット/口座残高のような銀行口座取引を処理します。クレジット/デビットコマンドでは、俳優はアカウントとSender.Tell()からクレジット/デビット残高を計算します。私のprogram.csから、私はBankAccountActorを呼び出してデビットを求め、結果とのバランスを取る。Akka.net送信者非アクターコンテキスト
私の問題は、BankAccountActorから、それはSender.Tell()と呼ばれています。ここでは送信者は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; }
}
}
あなたはここでどのようなタイプのアクターインスタンスを参照していますか? –
@AmalShalika私は.netについてはわかりませんが、scalaでは 'PromiseActorRef'ですので、あなたはソースを見て調べるべきです!それは、ソースを見ることを傷つけることは決してありません... –