如何异步等待Akka.Actor事件?

7fyelxc5  于 2022-12-13  发布在  其他
关注(0)|答案(1)|浏览(157)

我使用的是akka.NET。在大多数情况下,我们是这样使用akka的:

class ActorA : UntypedActor
{
    public delegate void EventHandler(object arg1, object arg2, ...);
    public static event EventHandler Event;
}
actorA.Event += some_function;

在这种情况下,只要调用Event.Invoke(arg1, arg2),我们就执行some_function(arg1, arg2)。现在假设我们有一个异步HTTP服务器,我试图让服务器异步等待actorA.Event的发生,在客户端调用服务器之后。当Event发生时,我不需要运行some_function。但我必须确保运行时上下文切换回HTTP服务器的函数,即:

// in the methods of the HTTP server...
public async void AwaitAnEvent()
{
    await ReturnOnEvent(actorA.Event);
}

是否可以有效地实现ReturnOnEvent,在调用下一个actorA.Event.Invoke(arg1, arg2)时立即返回?

dgenwo3n

dgenwo3n1#

这种情况有点不对劲。在Web控制器内部,只需询问您的演员,这将触发它生成响应。
当询问时,它将在控制器中等待得到响应。

var response =  myActor.Ask<ResponseType>(new GiveMySomeFoodMsg());
-- in the actor
Sender.Tell(new ResponseType(some data here))

相关问题