示例#1
0
 /// <summary>
 ///     等待所有对象信号(全开或全关)
 /// </summary>
 private static async Task WaitAllObjectSafeClose()
 {
     lock (ActiveObjects)
     {
         if (FlowServices.Length == 0 || ActiveObjects.Count == 0)
         {
             return;
         }
     }
     await ActiveSemaphore.WaitAsync();
 }
示例#2
0
 /// <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);
 }