2017-03-28 8 views
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는 하나의 메시지, 예상되는 답을 수신하는 데 사용되는 배우 인스턴스를 생성하기 때문에 의미가 있습니다.

+0

여기에 언급 된 액터 인스턴스의 유형은 무엇입니까? –

+0

@AmalShalika .net에 대해서는 모르겠지만 scala에서는 PromiseActorRef입니다. 소스를보고 알아봐야합니다! 근원을 보는 것은 결코 아프지 않습니다 ... –