private async Task StopServices() { var phases = new Dictionary <int, LifecycleGroup>(); foreach (var service in _lifecyclesServices) { var phase = GetPhase(service); phases.TryGetValue(phase, out var group); if (group == null) { group = new LifecycleGroup(TimeoutPerShutdownPhase, false, _logger); phases.Add(phase, group); } group.Add(service); } if (phases.Count > 0) { var keys = new List <int>(phases.Keys); keys.Sort(); keys.Reverse(); foreach (var key in keys) { await phases[key].Stop(); } } }
private async Task StartServices(bool autoStartupOnly) { var phases = new Dictionary <int, LifecycleGroup>(); foreach (var service in _lifecyclesServices) { if (!autoStartupOnly || (service is ISmartLifecycle lifecycle && lifecycle.IsAutoStartup)) { var phase = GetPhase(service); phases.TryGetValue(phase, out var group); if (group == null) { group = new LifecycleGroup(TimeoutPerShutdownPhase, autoStartupOnly, _logger); phases.Add(phase, group); } group.Add(service); } } if (phases.Count > 0) { var keys = new List <int>(phases.Keys); keys.Sort(); foreach (var key in keys) { await phases[key].Start(); } } }