首页 > 代码库 > 为你的代码加上一层重试机制
为你的代码加上一层重试机制
为代码加上重试机制
1.前言:对于经常跟网络编程打交道的你来说,并不是你的每次Request,Server都会给你想要的Response。重试机制虽然并不能解决这种情况,但是却可以大大减少这种情况的发生。
2.介绍下重试机制类:RetryUtil.cs
使用了委托,代码很短,也不难理解。
1 public class RetryUtil 2 { 3 public delegate void NoArgumentHandler(); 4 /// <summary> 5 /// retry mechanism without argument 6 /// </summary> 7 /// <param name="retryTimes">try times</param> 8 /// <param name="interval">time span</param> 9 /// <param name="throwIfFail">throw exception</param>10 /// <param name="function">function name</param>11 public static void Retry(int retryTimes, TimeSpan interval, bool throwIfFail, NoArgumentHandler function)12 {13 if (function == null)14 return;15 16 for (int i = 0; i < retryTimes; ++i)17 {18 try19 {20 function();21 break;22 }23 catch (Exception)24 {25 if (i == retryTimes - 1)26 {27 if (throwIfFail)28 throw;29 else30 break;31 }32 else33 {34 if (interval != null)35 Thread.Sleep(interval);36 }37 }38 }39 }40 }
3.举例使用:Demon
3.1 下载文件,如果出错重复尝试五次,每次间隔2秒,全部失败抛出异常。
1 RetryUtil.Retry(5, TimeSpan.FromSeconds(2), true, delegate2 {3 WebClientUtil.DownloadFile(string.Format("{0}{1}", baseUrl, tdNewSeries), 30000, dexsrp);4 });
3.2 搜索Outlook邮件,如果出错重复尝试五次,每次间隔2秒,全部失败抛出异常。
1 public List<EmailMessage> GetSearchQueryEmailMessage(string mailbox, string subjectKeyword, DateTime startDate, DateTime endDate, string sendAddress = "", string mailFolderPath = @"Inbox", string bodyKeyword = "") 2 { 3 List<EmailMessage> emails = null; 4 this.query = new EWSMailSearchQuery(sendAddress, mailbox, mailFolderPath, subjectKeyword, bodyKeyword, startDate, endDate); 5 6 RetryUtil.Retry(5, TimeSpan.FromSeconds(2), true, delegate 7 { 8 emails = EWSMailSearchQuery.SearchMail(service, query); 9 });10 11 return emails;12 }
3.3 访问网页,如果出错重复尝试五次,每次间隔2秒,全部失败抛出异常。
1 RetryUtil.Retry(5, TimeSpan.FromSeconds(2), true, delegate2 {3 htc = WebClientUtil.GetHtmlDocument(sourceUrl, 3000);4 });
为你的代码加上一层重试机制
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。