Beispiel #1
0
        public async Task StartAsync(CancellationToken stoppingToken)
        {
            InitTask = Init();

            try
            {
                await InitTask;
            }
            catch (Exception ex)
            {
                _status = KernelStatus.ShuttingDown;

                await OnInitFailed(ex);

                return;
            }

            _status = KernelStatus.Running;

            _shutdownReasons.Add(stoppingToken.WaitForCancelerationAsync());
            _shutdownReasons.Add(_selfDisposingCTS.Token.WaitForCancelerationAsync());
            _shutdownReasons.AddRange(GetShutdownReasons());

            int firstIndex = _shutdownReasons.IndexOf(await Task.WhenAny(_shutdownReasons));

            _status = KernelStatus.ShuttingDown;

            await DisposeAsync(firstIndex);
        }
Beispiel #2
0
 public Kernel()
 {
     _selfDisposingCTS = new CancellationTokenSource();
     _shutdownReasons  = new List <Task>();
     _status           = KernelStatus.Initing;
     ShutDownReason    = "unknown reason";
 }