c# - 有没有办法等待 Actor 完全停止?

标签 c# akka akka.net

据我所知,Akka.Net 中的所有操作都是异步的,Context.Stop() 只是向 actor 发送一个 Stop 消息。这意味着,actor 在完全关闭之前会存活一段时间。

如果我在 Context.Stop() 之后用我刚刚停止的 Actor 的名字调用 Context.Child(),我会得到相同的结果 Actor 。

这是示例代码

var actor = context.Child(actorName);

if (actor.Equals(ActorRefs.Nobody))
{
    actor = CreateNewActor();
}

Context.Stop(actor)
actor = context.Child(actorName);
// what do we get here, same actor or ActorRefs.Nobody ?

我的应用程序创建参与者来处理来自终端的事件。每次连接新终端时,我都会使用终端名称调用 Context.Child() 来创建新的 actor。当终端断开连接时,我会停止 Actor 。

问题是,有时我会在同一终端的断开连接后立即收到连接消息,结果我得到的 Actor 将被停止。有什么方法可以检查 actor 是否收到了停止消息并将很快停止?

最佳答案

你可以使用

var shutdown = actor.GracefulStop(TimeSpan.FromSeconds(42));

它返回一个任务,其结果在 42 秒内确认关闭

更新

但是,以防万一,如果您想稍后使用相同的名称重新创建 actor,您应该在 actor 的主管中收听 Terminated 消息。

关于c# - 有没有办法等待 Actor 完全停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41504018/

相关文章:

queue - 持久 Akka 邮箱和无损

c# - 在 akka.net Actor 中安全地使用事件处理程序

c# - 在 VS2010 中制作 WPF 表单会比现在更容易吗?

c# - 在 Web API 中 Controller 初始化之前执行一些操作(设置语言)

c# - 从类中获取 JSON 属性名称列表以在查询字符串中使用

c# - 如何使 Windows 窗体适应任何屏幕分辨率?

java - 在 java 中使用 play framewok 和 akka 映射诊断上下文日志记录

Java CompletableFuture : Avoid callback hell

c# - 嵌套请求的正确模式

AKKA.NET 和 DeathWatchNotification