/// <summary> /// 等待所有对象信号(全开或全关) /// </summary> private static async Task WaitAllObjectSafeClose() { lock (ActiveObjects) { if (FlowServices.Length == 0 || ActiveObjects.Count == 0) { return; } } await ActiveSemaphore.WaitAsync(); }
/// <summary> /// 系统启动时调用 /// </summary> static async Task <bool> OpenAll() { if (ZeroAppOption.Instance.ApplicationState >= StationState.BeginRun) { return(false); } ZeroAppOption.Instance.SetApplicationState(StationState.BeginRun); Logger.Information("【启动】开始"); foreach (var mid in Middlewares) { try { Logger.Information("[启动流程] {0}", mid.Name); _ = mid.Open(); } catch (Exception e) { Logger.Exception(e, "[启动流程] {0}", mid.Name); } } FlowServices = Services.Values.Where(service => !(service is EmptyService) && (service.CanRun == null || service.CanRun())).OrderBy(p => p.Level).ToArray(); foreach (var service in FlowServices) { try { Logger.Information("[启动服务] {0}", service.ServiceName); _ = service.Open(); } catch (Exception e) { Logger.Exception(e, "[启动服务] {0}", service.ServiceName); } } //等待所有对象信号(Active or Failed) if (FlowServices.Length > 0) { await ActiveSemaphore.WaitAsync(); } ZeroAppOption.Instance.SetApplicationState(StationState.Run); Logger.Information("【启动】完成"); return(true); }