C# 中的Retry 模型

场景:
在另一个线程中,指定失败次数,不断重试直到得到期望结果。


工具类:
public class Retry
{
	public static Retry Instance(){
		return new Retry();
	}
	
    public TResult Execute<TResult>(
	Func<TResult> action,
	int secondsInterval,
	int retryCount,
	TResult expectedResult,
	bool isSuppressException = true
      )
    {
       TResult result = default(TResult);


       var exceptions = new List<Exception>();
	   	for (var retry = 0; retry < retryCount; retry++)
        {
			try
			{
				if (retry > 0){
					Thread.Sleep(secondsInterval * 1000);
				}
				
				result = action();
				Console.WriteLine(string.Format("executing {0} times, result : {1}",retry+1,result));
			}
			catch (Exception ex)
			{
				exceptions.Add(ex);
			}
	
			if (result.Equals(expectedResult)){
					return result;
			}
		}
	
		if (!isSuppressException){
			throw new AggregateException(exceptions);
		}   
		else{
			return result;
		}
   }
}






使用示例:
void Main()
{
	try{
		var expected = 5;
		var retryCount = 10;
		var ret = Retry.Instance().Execute<int>(()=>{var r = new Random(); return r.Next(10);},1,retryCount,expected);
		if(expected == ret)
			Console.WriteLine("done. got result : " + ret);
		else
			Console.WriteLine("tried {0} times , failed to get expected result : {1}",retryCount,expected);
	}
	catch (Exception ex){
		Console.WriteLine(ex.Message);
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值