C# 非参与者上下文上的Akka.net发送方
我的actor系统在控制台应用程序上初始化。我配置了一个actor call BankAccrountActor,负责处理银行账户交易,如账户的贷记/借记/账户余额。在“贷记/借记”命令下,参与者将从帐户和发送者处贷记/借记金额。Tell()以及剩余余额。从我的program.cs中,我打电话给BankAccountActor请求借记,并根据结果获得余额 我的问题是BankAccountActor调用了Sender.Tell(),并带有余额。在这里,发送方是IActorRef类型,结果将进入程序类,而程序不是参与者。怎么可能呢C# 非参与者上下文上的Akka.net发送方,c#,akka,akka-http,akka.net,akka.net-cluster,C#,Akka,Akka Http,Akka.net,Akka.net Cluster,我的actor系统在控制台应用程序上初始化。我配置了一个actor call BankAccrountActor,负责处理银行账户交易,如账户的贷记/借记/账户余额。在“贷记/借记”命令下,参与者将从帐户和发送者处贷记/借记金额。Tell()以及剩余余额。从我的program.cs中,我打电话给BankAccountActor请求借记,并根据结果获得余额 我的问题是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; }
}
名称空间帐户
{
班级计划
{
静态void Main(字符串[]参数)
{
ActorSystem ActorSystem=ActorSystem.Create(“BankAccountSystem”);
Props bankAccountAccProps=Props.Create();
IActorRef bankAccActor=actorSystem.ActorOf(bankAccountAccProps,“abc”);
var remainBalance=bankAccActor.Ask(新DebitAccMessage(100)).Result;
}
}
内部类BankAccountActor:ReceiveActor
{
私有十进制_accballance=100;
公共银行账户参与者()
{
接收(消息=>借记(消息));
接收(消息=>信用(消息));
}
公共作废借方(DebitacMessage debitMessage)
{
_accBalance+=借方消息金额;
发送者。告诉(_accBalance);
}
公共无效信用证(CreditAccMessage debitMessage)
{
_accBalance-=借方消息金额;
发送者。告诉(_accBalance);
}
}
内部类CreditAccMessage
{
公共CreditAccMessage(十进制金额)
{
金额=金额;
}
公共十进制数{get;private set;}
}
内部类DebitAccMessage
{
公共DebitacMessage(十进制金额)
{
金额=金额;
}
公共十进制数{get;private set;}
}
}它之所以有效,是因为在引擎盖下,
Ask
创建了一个仅用于接收一条消息的actor实例,即预期答案。它之所以有效,是因为在引擎盖下,Ask
创建了一个仅用于接收一条消息的actor实例,预期答案。您在这里指的是哪种类型的actor实例?@AmalShalika我不知道.net,但在scala中它是PromiseActorRef
,您应该查看源代码以了解!查看源代码从来都没有坏处……您在这里指的是哪种类型的actor实例?@AmalShalika我不知道.net,但在scala中,它是PromiseActorRef
,您应该查看源代码来了解!看看这些消息来源是不会有伤害的。。。