/// <summary>
        /// 检查过载
        /// </summary>
        /// <returns></returns>
        private async Task <(bool result, Valve valve)> CheckAsync(FilterContext context)
        {
            //循环验证是否过载
            foreach (var valve in _valves.OrderByDescending(x => x.Priority))
            {
                //取得识别值
                var policyValue = context.HttpContext.GetPolicyValue(_options, valve.Policy, valve.PolicyKey);
                //识别值为空时处理
                if (string.IsNullOrEmpty(policyValue))
                {
                    if (valve.WhenNull == WhenNull.Pass)
                    {
                        continue;
                    }
                    else
                    {
                        return(false, valve);
                    }
                }

                if (valve is BlackListValve)
                {
                    //黑名单
                    var wl = await _cache.GetRosterListAsync(RosterType.BlackList, _api, valve.Policy, valve.PolicyKey);

                    if (wl.Any(x => string.Equals(x.Value, policyValue)))
                    {
                        return(false, valve);
                    }
                }
                else if (valve is WhiteListValve)
                {
                    //白名单
                    var wl = await _cache.GetRosterListAsync(RosterType.WhiteList, _api, valve.Policy, valve.PolicyKey);

                    if (wl.Any(x => string.Equals(x.Value, policyValue)))
                    {
                        return(true, null);
                    }
                }
                else if (valve is RateValve rateValve)
                {
                    //速率阀门
                    if (rateValve.Duration <= 0 || rateValve.Limit <= 0)
                    {
                        //不限流
                        continue;
                    }
                    //判断是否过载
                    long count = await _cache.GetApiRecordCountAsync(_api, rateValve.Policy, rateValve.PolicyKey, policyValue, DateTime.Now, rateValve.Duration);

                    if (count >= rateValve.Limit)
                    {
                        return(false, valve);
                    }
                }
            }

            return(true, null);
        }