我想在ASP.NET Core中实现一个可以按时间间隔重复执行的IHostedService实例,可以在需要时停止并启动。我的理解是IHostedService是由框架在应用程序启动时启动的。
但是,我希望能够手动地启动/停止服务,可能使用UI上的开/关切换。理想情况下,“关闭”状态将会处理当前正在运行的服务,并且“打开”状态将创建一个新实例。
我已经阅读了MS文档:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/host/hosted-services?view=aspnetcore-2.1。
我的初步想法是获取正在运行的服务实例,然后调用公共
你有任何关于应该如何完成这项任务的想法吗,或者这么做甚至可行吗?我的方法是否违反了ASP.NET Core中托管服务的预期设计? 编辑 7.27.2018
但是,我希望能够手动地启动/停止服务,可能使用UI上的开/关切换。理想情况下,“关闭”状态将会处理当前正在运行的服务,并且“打开”状态将创建一个新实例。
我已经阅读了MS文档:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/host/hosted-services?view=aspnetcore-2.1。
我的初步想法是获取正在运行的服务实例,然后调用公共
StopAsync(CancellationToken token)
方法。但是,当涉及到我应该传递哪个token时,我有点卡住了,StartAsync(CancellationToken cancellationToken)
方法也是如此。你有任何关于应该如何完成这项任务的想法吗,或者这么做甚至可行吗?我的方法是否违反了ASP.NET Core中托管服务的预期设计? 编辑 7.27.2018
经过更多的研究(也就是实际阅读文档:D),似乎托管服务的StartAsync/StopAsync方法确实应该与应用程序的生命周期相一致。似乎无法将注册的IHostedServices添加到DI容器中以便于注入其他类。
因此,我认为我的初始想法行不通。目前,我使用带有配置依赖项(IOptions<T>
)注册了我的服务。在托管服务处理时,它将检查配置以查看是否应该继续运行,否则它将只等待(而不是停止或处置托管服务)。
除非听到其他建议,否则我很快会将此标记为我的答案。