namespace Hotline.Share.Tools;

/// <summary>
/// 重试操作辅助类
/// </summary>
public static class RetryHelper
{
    /// <summary>
    /// 重试
    /// </summary>
    /// <param name="func"> 重试方法 </param>
    /// <param name="times"> 重试次数 (1 与 100 之间的整数) </param>
    /// <param name="millisecond"> 重试等待毫秒 </param>
    /// <returns> 是否执行成功 </returns>
    public static bool Retry(Func<bool> func, int times, int millisecond = 0)
    {
        if (times <= 1 && times >= 100)
        {
            throw new ArgumentOutOfRangeException("times 参数有误。只能是介于 1 与 100（包含1和100）之间的整数。");
        }

        while (times > 0)
        {
            if (func())
            {
                return true;
            }

            times--;
            if (millisecond > 0)
            {
                Thread.Sleep(millisecond);
            }
        }

        return false;
    }
}
