C#:Interval Helper
目录
背景
间隔帮助类
使用帮助类
检查!!!
- 下载Visual Studio 2017解决方案,包括测试代码 - 4.7 KB
背景
我从C#调用私有API,每个用户的API限制为每秒2次调用。因此,如果在一秒钟内调用API超过两次,则有可能获得“速率限制达到异常”。这就是为什么在进行API调用之前,我们必须确保两个调用start之间的时间间隔至少为500毫秒。
我们不只是在进行API调用。每次调用后,我们都要处理其他一些事情。为了使事情易于管理,我们使用了一个简单的间隔帮助类,它为我们提供了预期的等待时间。之后等待时间已经过去Thread.Sleep(),就是这样。让我们检查时间间隔帮助类及其用法。
间隔帮助类
这是接口:
public interface IIntervalHelper<TInterval>
{/// <summary>/// Expected Interval/// </summary>TInterval Interval();/// <summary>/// Process start time, assigned at Begin method/// </summary>DateTime StartDateTime();/// <summary>/// Set interval/// </summary>/// <param name="interval">Time</param>void SetInterval(TInterval interval);/// <summary>/// Start process time count, will set startDateTime/// </summary>/// <param name="startDateTime">Default DateTime.Now</param>void Begain(DateTime? startDateTime = null);/// <summary>/// Get passed time/// </summary>/// <param name="endDateTime">Should be greater than startDateTime, /// Default DateTime.Now</param>/// <returns>Time</returns>TInterval PassedTime(DateTime? endDateTime = null);/// <summary>/// Get remaining time/// </summary>/// <param name="endDateTime">Should be greater than startDateTime, /// Default DateTime.Now</param>/// <returns>Time</returns>TInterval RemainingTime(DateTime? endDateTime = null);
}
使用接口创建主帮助类:
/// <summary>
/// TimeSpan interval helper class
/// </summary>
public class TimeSpanIntervalHelper : IIntervalHelper<TimeSpan>
{private TimeSpan _interval;private DateTime _startDateTime;public TimeSpanIntervalHelper(TimeSpan interval){SetInterval(interval);}public TimeSpan Interval(){return _interval;}public DateTime StartDateTime(){return _startDateTime;}public void SetInterval(TimeSpan interval){_interval = interval;}public void Begain(DateTime? startDateTime = null){_startDateTime = startDateTime ?? DateTime.Now;}public TimeSpan PassedTime(DateTime? endDateTime = null){DateTime dateTime = endDateTime ?? DateTime.Now;if (dateTime < _startDateTime){throw new ArgumentException("EndDateTime should n't be less then StartDateTime");}TimeSpan difference = dateTime - _startDateTime;return difference;}public TimeSpan RemainingTime(DateTime? endDateTime = null){DateTime dateTime = endDateTime ?? DateTime.Now;TimeSpan passedTime = PassedTime(dateTime);TimeSpan remainingTime = _interval - passedTime;return remainingTime;}
}
使用帮助类
在这里,我们将间隔设置为500毫秒。
TimeSpan interval = new TimeSpan(0, 0, 0, 0, 500);
var intervalHelper = new TimeSpanIntervalHelper(interval);for (int i = 0; i < 10; i++)
{intervalHelper.Begain();/** doing jobs or calling web api as needed for each item*//*at end of each process*/DateTime endDateTime = DateTime.Now;TimeSpan value = intervalHelper.PassedTime(endDateTime);value = intervalHelper.RemainingTime(endDateTime);/*we can also dovalue = intervalHelper.PassedTime();value = intervalHelper.RemainingTime();*//*wait and do job again*/Thread.Sleep(value);
}
有关更多信息,请检查TimeSpan_Use()测试方法。
检查!!!
在源代码中,我们将找到另一个帮助类IntervalHelper,它只在毫秒内管理事物。用法与TimeSpanIntervalHelper相同。在MilliSecond_Use()测试方法中查找用法代码。
C#:Interval Helper相关推荐
- MVC Razor:自定义Helper方法
在使用自定义Helper方法时,开始我试了很多次都不成功一直报错"找不到WebMatrix.WebData.dll.WebMatrix.Data.dll". 应该是一个bug,估计 ...
- 【Aegisub相关】VSCode插件:Aegisub Helper的安装、功能介绍及使用方法
原作者插件的开源链接: https://github.com/DCTewi/Aegisub-Helper 附上横行写法文件的压缩包: Aegisub Helper 标准模板示例(含使用教程) 题外话: ...
- Chrome安装爬虫必备插件:Xpath Helper高效解析网页内容(实测有效)
Chrome安装爬虫必备插件:Xpath Helper(最新教程) 1. 谷歌浏览器xpath helper插件的安装和使用 2. 谷歌浏览器xpath helper插件的作用 3. 谷歌浏览器xpa ...
- C#:异步编程和线程的使用(.NET 4.5 ),异步方法改为同步执行
摘自:http://www.codeproject.com/Articles/996857/Asynchronous-programming-and-Threading-in-Csharp-N(葡萄城 ...
- 关于c#:Filter Serilog日志取决于上下文源到不同的接收器?
我有一个.NET Core 2.0应用程序,可以在其中成功使用Serilog进行日志记录.现在,我想将一些数据库性能统计信息记录到一个单独的接收器中(它们不是用于调试的,这基本上是应用程序中所有其他记 ...
- c# task添加顺序_关于c#:Task和async等待所需的指导
本问题已经有最佳答案,请猛点这里访问. 在浏览了许多文章和视频后,我仍然对异步编程有疑问.我正在一个项目中,在服务层中,我已将所有方法创建为异步方法.所有返回Task < T >或Task ...
- C#:泛型Range助手
目录 介绍 背景 我们会做什么? 范围(Range)模型 创建整数范围(Range) 使用整数范围(Range) 创建日期时间范围(Range) 使用DateTime范围 下载解决方案 - 7.3 K ...
- C#:适配器设计模式如何让您的生活更轻松
目录 介绍 文章的目标 理解本文您需要知道什么 适配器设计模式的简要提示 第一个示例:静态.NET类 第二个示例:使用第三方记录器替换自定义记录器 第三个示例:使用不同的自定义记录器替换自定义记录器 ...
- MongoDB C#:DateTimeOffset到BsonType DateTime的序列化程序
目录 介绍 背景 使用代码 兴趣点 目前不支持将DateTimeOffset序列化为MongoDB中的DateTime.该解决方案将向您展示它是如何工作的. 介绍 如果您需要DateTimeOffse ...
最新文章
- 2022-2028年中国热熔胶产业竞争现状及发展规模预测报告
- MariaDB Galera 集群安装配置
- MATLAB函数记录
- android 百度map 一个layout加载多个mapview,android 百度地图API 使用Marker和InfoWindow
- 双时隙的工作原理_双作用叶片泵工作原理是怎样的?作为8年工程师都没了解这么深...
- 系统学习数字图像处理之图像压缩
- 【原创】SM4password算法源代码接口具体解释
- QoS专题-第4期-QoS实现之限速
- 使用jQuery高效制作网页特效 第六章习题
- STM32学习笔记(正点原子STM32Mini版)
- SpringBoot——springboot SPI原理与实战
- opencv学习记录【6】(codebook
- 记录日常行程的微信小程序开发与实现-武汉理工大学
- android view.isshown,关于android:View getVisibility()isShown()返回不正确的可见性
- React Native 0.44.3 ----------微信h5支付
- [ 工具 ] ___ Browser : Chrome
- python有哪些细节描写_人物细节描写的类型有哪些
- 一行代码用表情包制作炫酷二维码,详细教程奉上,包学会
- ubuntu系统中用c语言编写简单程序
- openGauss数据库源码解析系列文章——openGauss开发快速入门(二)
热门文章
- c++以空格分开的输入数组_技术贴,MATLAB矩阵与数组汇总讲解!
- html文本框 控件,标签和文本框都用于显示文本
- python表达式3 5_python3 第五章 - 什么是变量、运算符、表达式
- 设计灵感|各种孟菲斯风格海报,让你眼花缭乱
- python进程socket通信_python实现多进程通信实例分析
- 初二物理模型有哪些_老师整理的初二学习方法!自己看完转给孩子看
- C++ static关键字作用讲解
- 垃圾回收算法_Java 垃圾回收算法与几种垃圾回收器
- Django:Django简介,MTV,Django常用命令
- Python库:time库