Lor*_*eno 7 .net c# console-application .net-core
我正在构建一个IHostedService实现。我的服务做了一些事情,这些事情应该在服务终止时处理,例如将一些事件处理程序注册到StartAsync().
现在我想知道,我应该在哪里真正注销这些处理程序?我自然会这样做Dispose()。然而,StopAsync()那是为了什么?
在控制台应用程序环境中,我认为它会像这样工作:
StopAsync()叫做Dispose()叫做我希望我的应用程序设计良好并涵盖其他可能的场景。例如,后台服务。我认为在这种情况下,有一个选择StopAsync(),然后StartAsync()没有Dispose()之间的选择。我对吗?
我应该处理这种情况吗?我的意思是,去登记StartAsync()我是否已经以某种方式注册了?
很难在带有控制台应用程序的 .NET Core 中找到有关通用主机的一些最佳实践。
Dispose当您的对象准备好被垃圾收集器收集时调用(广义而言)。
它与托管服务没有太大关系,而是 .NET 中的通用接口。我不完全确定服务是否可以停止然后重新启动。文档说了以下内容。
托管服务在应用程序启动时激活一次,并在应用程序关闭时正常关闭。如果在后台任务执行期间引发错误,即使未调用 StopAsync,也应调用 Dispose。
因此,我建议您在 中注册处理程序StartAsync并在 中取消注册/清理StopAsync。
如果您有本机资源(例如文件句柄、管道、套接字),则应该在Dispose. 不要期望 StopAsync 被调用。您的主机可能无法正常关闭服务,但如果您的服务“已发布”,则可能会调用 Dispose,以便您仍然可以进行清理并成为一个好公民。
| 归档时间: |
|
| 查看次数: |
4197 次 |
| 最近记录: |