public static FlowControllerFactory GetInstance() { if (instance == null) { lock (syncObj) { if (instance == null) { instance = new FlowControllerFactory(); } } } return(instance); }
/// <summary> /// 流控 /// </summary> /// <param name="strategy">流控策略</param> /// <param name="count">请求次数</param> public static void FlowControl(FlowControlStrategy strategy, int count = 1) { var controller = FlowControllerFactory.GetInstance().GetOrCreateFlowController(strategy); TimeSpan waitTimespan = TimeSpan.Zero; var result = controller.ShouldThrottle(count, out waitTimespan); if (result) { if (strategy.IsRefusedRequest == false && waitTimespan != TimeSpan.Zero) { WaitForAvailable(strategy, controller, waitTimespan, count); } else if (strategy.IsRefusedRequest) { throw new Exception("触发流控!"); } } }