.NET托管服务和Singleton服务之间的核心区别

Aza*_*Haq 5 .net c# asp.net-mvc .net-core asp.net-core

从.NET Core 2.1开始,我们现在可以使用托管服务运行后台任务。

我相信我们可以通过将服务类添加到具有Singleton范围的服务容器来实现相同的目的。

与具有单例作用域的服务相比,拥有托管服务有什么好处?主要区别是什么?

我们可以将单例作用域服务注入控制器,并在每个新请求中对其进行操作。但是,这对于托管服务是不可能的。

pok*_*oke 8

托管服务实际上是单例服务。区别在于,托管服务具有特定的生存期:(web)主机启动时,托管服务将启动,而(web)主机关闭时,托管服务也将明确终止。这允许您包括启动或关闭行为,例如,建立或终止与外部服务的连接。

相比之下,注册为单例的常规服务仅在首次解析它们时实例化,并在应用程序关闭期间处置服务提供商时处置。

这样,在应用程序启动或停止时,托管服务使您可以更好地控制如何处理服务。但是与此并没有太多魔术。

  • @whendon 因为单例服务本身不会执行任何操作,除非您明确地让它执行某些操作:是的,托管服务就是您想要使用的服务,因为框架将在应用程序启动时激活它。在您的情况下,您可以从 [`BackgroundService`](https://docs.microsoft.com/en-us/dotnet/api/microsoft.extensions.hosting.backgroundservice?view=dotnet-plat-ext-6.0) 继承并使用“await Task.Delay(TimeSpan.FromMinutes(10))”进行循环以在其间暂停。它是异步的,这意味着在等待期间不会对您的性能产​​生任何影响。 (2认同)