Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 非参与者上下文上的Akka.net发送方_C#_Akka_Akka Http_Akka.net_Akka.net Cluster - Fatal编程技术网

C# 非参与者上下文上的Akka.net发送方

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类型,结果将进入程序

我的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
,您应该查看源代码来了解!看看这些消息来源是不会有伤害的。。。