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); }
public Kernel() { _selfDisposingCTS = new CancellationTokenSource(); _shutdownReasons = new List <Task>(); _status = KernelStatus.Initing; ShutDownReason = "unknown reason"; }