2017-03-28 8 views
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; } 
} 

}

答えて

0

フード下で、Askはただ1つのメッセージ、予想される回答を受信するために使用されるアクターのインスタンスを作成するため、それが動作します。

+0

あなたはここでどのようなタイプのアクターインスタンスを参照していますか? –

+0

@AmalShalika私は.netについてはわかりませんが、scalaでは 'PromiseActorRef'ですので、あなたはソースを見て調べるべきです!それは、ソースを見ることを傷つけることは決してありません... –