/// <summary>
 /// 执行回调函数
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="key"></param>
 /// <param name="func"></param>
 /// <returns></returns>
 async Task <T> DoSync <T>(string key, Func <ISyncServiceFlowControlConfigureGrain, Task <T> > func)
 {
     try
     {
         var grain = (await OrleanClientProvider.GetGrain(key));
         if (grain != null)
         {
             return(await func(grain));
         }
         return(default);
 public async Task RegisterConfigureObserver(string key)
 {
     if (!observers.Value.TryGetValue(key, out FlowControlConfigureObserver observer))
     {
         await DoSync(key, true, async (grain) =>
         {
             observer      = new FlowControlConfigureObserver();
             var reference = await(await OrleanClientProvider.GetClient()).CreateObjectReference <IFlowControlConfigureObserver>(observer);
             if (await grain.RegisterObserver(reference))
             {
                 observers.Value.TryAdd(key, observer);
             }
         });
     }
 }
        /// <summary>
        /// 获取服务配置节
        /// </summary>
        /// <param name="pathName"></param>
        /// <returns></returns>
        public async Task <ServiceConfigureInfo> GetBreakerConfigure(string flowControlCfgKey, bool readLocalCache = true)
        {
            var cacheKey = $"{OxygenSetting.BreakerSettingKey}{ flowControlCfgKey}";
            ServiceConfigureInfo result = null;

            if (readLocalCache)
            {
                if (!OrleanClientProvider.GetConfigureCache().TryGetValue(cacheKey, out result))
                {
                    result = await _syncConfigureProvider.GetConfigure(cacheKey);

                    _ = Task.Run(() => RegisterConfigureObserver(cacheKey));
                }
            }
            else
            {
                result = await _syncConfigureProvider.GetConfigure(cacheKey);
            }
            return(result);
        }