为什么我的 actix Supervisor 不重试停止的演员?

Why does my actix Supervisor not retry stopped actors?

我已经实现了一个包含 Supervised 特征的 actix actor。然后我尝试使用

以受监督的方式启动演员
let _: Addr<Unsync, _> = Supervisor::start(|_| MyActor::default());

不幸的是,当该 actor 停止时,由于某种原因它不会自动重新启动。


依赖版本

actix = "0.5"

actix的作者Nikolay Kim帮我分析了这个问题。事实证明,将 Supervisor::start() 结果分配给名为 _ 的变量会自动丢弃结果,因此主管实际上不会正确启动。

此问题的解决方案是将 _ 变量重命名为 _addr:

let _addr: Addr<Unsync, _> = Supervisor::start(|_| MyActor::default());

重命名后 Supervisor 正确地重新启动停止后的 MyActor actor。