using System;
using Polly;
namespace WMS.Util
{
    public static class PolicyHelper
    {
        #region 执行策略
        /// 
        /// 重试次数策略
        /// 
        /// 
        /// 错误处理
        /// 
        public static Policy GetRetryTimesPolicy(int time, Action exAction = null)
        {
            if (time <= 0) return default(Policy);
            Policy policy = null;
            if (exAction == null)
            {
                policy = Policy
                    .Handle()
                    .Retry(time);
            }
            else
            {
                policy = Policy
                    .Handle()
                    .Retry(time, (ex, count) =>
                    {
                        exAction(ex);
                    });
            }
            return policy;
        }
        /// 
        /// 超时策略
        /// 
        /// 
        /// 
        public static Policy GetTimeOutPolicy(int milliseconds)
        {
            if (milliseconds <= 0) return default(Policy);
            var policy = Policy
                .Timeout(TimeSpan.FromMilliseconds(milliseconds));
            return policy;
        }
        /// 
        /// 回退策略
        /// 
        /// 
        /// 
        public static Policy GetFallBackPolicy(Action method)
        {
            if (method==null) return default(Policy);
            var policy=Policy
                .Handle()
                .Fallback(method);
            return policy;
        }
        #endregion
    }
}