public static void ShutdownAllBackgroundThreads() { IsShuttingDown = true; CTS.Cancel(); SessionLog.Info("Shutting down"); Log.Information("Shutting down workers..."); WorkSpawner.Shutdown(); Log.Information("Shutting down counter monitor..."); SignalR.HomeDashboard.DotNetCoreCounterListener.Instance?.Stop(); Log.Information("Shutting down stats counter..."); Performance.StatsDB.Shutdown(); Log.Information("Shutting down common notifications..."); Hubs.CommonNotificationThread.Instance?.Shutdown(); Log.Information("Shutting down exception logger..."); ExceptionLogger.Instance?.Shutdown(); Log.Information("Shutting down background thread plugins..."); BackgroundThreadPluginManager.Instance?.Shutdown(); Log.Information("Shutting down real-time tracker..."); RealtimeTrackerThread.Instance.Shutdown(); Log.Information("Shutting down data collector..."); DataCollectorThread.Instance.Shutdown(); Log.Information("Shutting jsDAL health monitor..."); jsDALHealthMonitorThread.Instance.Shutdown(); Log.Information("Shutting down session log..."); SessionLog.Shutdown(); }