我有一个简单的StatelessService,我想知道何时关闭它,以便我可以进行一些快速清理。但是它似乎从未调用过OnCloseAsync。
当服务正在运行并且我通过Service Fabric资源管理器在运行的节点上使用“重新启动”命令时,它将删除服务并重新启动该节点。但是,即使它被故意关闭,它也永远不会调用OnCloseAsync替代。
它也不表示已传递到RunAsync方法中的cancellingToken。因此,没有迹象表明该服务正在关闭。它确实调用OnCloseAsync时是否有任何情况,因为此刻我看不到任何意义。
答案 0 :(得分:2)
我想知道发出重新启动命令的原因,您期望什么行为? 它确实解释了您看到的行为。从the docs开始(请注意,重新启动只是停止和启动的组合)
停止节点会使其处于停止状态,在该状态下,它不是集群的成员并且无法托管服务,因此模拟了故障节点。这对于将故障注入系统以测试您的应用程序很有用。
现在,如果我们看一下the lifecycle,我们会读到以下内容:
在每个侦听器上完成CloseAsync()并且完成RunAsync()之后,将调用服务的StatelessService.OnCloseAsync()方法(如果存在)。当将正常关闭无状态服务实例时,将调用OnCloseAsync。
因此,基本问题是您的服务没有正常关闭。重新启动命令将终止该进程,并且不会发出任何取消。