Пример #1
0
        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();
                }
            }
        }
Пример #2
0
        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();
                }
            }
        }