从.NET Core 2.1开始,我们现在可以使用托管服务来运行后台任务。
我相信通过将服务类添加到单例作用域的服务容器中,我们也可以实现相同的功能。
与具有单例作用域的服务相比,拥有托管服务的好处是什么?它们之间的主要区别是什么?
我们可以将单例作用域的服务注入到控制器中,并在每个新请求中操纵它。然而,这对于托管服务来说是不可能的。
从.NET Core 2.1开始,我们现在可以使用托管服务来运行后台任务。
我相信通过将服务类添加到单例作用域的服务容器中,我们也可以实现相同的功能。
与具有单例作用域的服务相比,拥有托管服务的好处是什么?它们之间的主要区别是什么?
我们可以将单例作用域的服务注入到控制器中,并在每个新请求中操纵它。然而,这对于托管服务来说是不可能的。
托管服务实际上是单例服务。不同之处在于托管服务具有特定的生命周期:当(web)主机启动时,托管服务将启动,而当(web)主机关闭时,托管服务也会被明确终止。这允许您包含启动或关闭行为,例如建立或终止与外部服务的连接。
相比之下,注册为单例的普通服务仅在首次解析时实例化,并在应用程序关闭期间服务提供程序被处理时进行释放。
因此,托管服务让您对应用程序启动或停止时如何处理服务拥有更多控制权。但这并没有太多的神奇成分。
BackgroundService
继承,并使用await Task.Delay(TimeSpan.FromMinutes(10))
进行循环以间隔暂停。它是异步的,这意味着在等待时间期间对性能的影响将大大降低。 - poke