目录

背景

间隔帮助类

使用帮助类

检查!!!


  • 下载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相关推荐

  1. MVC Razor:自定义Helper方法

    在使用自定义Helper方法时,开始我试了很多次都不成功一直报错"找不到WebMatrix.WebData.dll.WebMatrix.Data.dll". 应该是一个bug,估计 ...

  2. 【Aegisub相关】VSCode插件:Aegisub Helper的安装、功能介绍及使用方法

    原作者插件的开源链接: https://github.com/DCTewi/Aegisub-Helper 附上横行写法文件的压缩包: Aegisub Helper 标准模板示例(含使用教程) 题外话: ...

  3. Chrome安装爬虫必备插件:Xpath Helper高效解析网页内容(实测有效)

    Chrome安装爬虫必备插件:Xpath Helper(最新教程) 1. 谷歌浏览器xpath helper插件的安装和使用 2. 谷歌浏览器xpath helper插件的作用 3. 谷歌浏览器xpa ...

  4. C#:异步编程和线程的使用(.NET 4.5 ),异步方法改为同步执行

    摘自:http://www.codeproject.com/Articles/996857/Asynchronous-programming-and-Threading-in-Csharp-N(葡萄城 ...

  5. 关于c#:Filter Serilog日志取决于上下文源到不同的接收器?

    我有一个.NET Core 2.0应用程序,可以在其中成功使用Serilog进行日志记录.现在,我想将一些数据库性能统计信息记录到一个单独的接收器中(它们不是用于调试的,这基本上是应用程序中所有其他记 ...

  6. c# task添加顺序_关于c#:Task和async等待所需的指导

    本问题已经有最佳答案,请猛点这里访问. 在浏览了许多文章和视频后,我仍然对异步编程有疑问.我正在一个项目中,在服务层中,我已将所有方法创建为异步方法.所有返回Task < T >或Task ...

  7. C#:泛型Range助手

    目录 介绍 背景 我们会做什么? 范围(Range)模型 创建整数范围(Range) 使用整数范围(Range) 创建日期时间范围(Range) 使用DateTime范围 下载解决方案 - 7.3 K ...

  8. C#:适配器设计模式如何让您的生活更轻松

    目录 介绍 文章的目标 理解本文您需要知道什么 适配器设计模式的简要提示 第一个示例:静态.NET类 第二个示例:使用第三方记录器替换自定义记录器 第三个示例:使用不同的自定义记录器替换自定义记录器 ...

  9. MongoDB C#:DateTimeOffset到BsonType DateTime的序列化程序

    目录 介绍 背景 使用代码 兴趣点 目前不支持将DateTimeOffset序列化为MongoDB中的DateTime.该解决方案将向您展示它是如何工作的. 介绍 如果您需要DateTimeOffse ...

最新文章

  1. 2022-2028年中国热熔胶产业竞争现状及发展规模预测报告
  2. MariaDB Galera 集群安装配置
  3. MATLAB函数记录
  4. android 百度map 一个layout加载多个mapview,android 百度地图API 使用Marker和InfoWindow
  5. 双时隙的工作原理_双作用叶片泵工作原理是怎样的?作为8年工程师都没了解这么深...
  6. 系统学习数字图像处理之图像压缩
  7. 【原创】SM4password算法源代码接口具体解释
  8. QoS专题-第4期-QoS实现之限速
  9. 使用jQuery高效制作网页特效 第六章习题
  10. STM32学习笔记(正点原子STM32Mini版)
  11. SpringBoot——springboot SPI原理与实战
  12. opencv学习记录【6】(codebook
  13. 记录日常行程的微信小程序开发与实现-武汉理工大学
  14. android view.isshown,关于android:View getVisibility()isShown()返回不正确的可见性
  15. React Native 0.44.3 ----------微信h5支付
  16. [ 工具 ] ___ Browser : Chrome
  17. python有哪些细节描写_人物细节描写的类型有哪些
  18. 一行代码用表情包制作炫酷二维码,详细教程奉上,包学会
  19. ubuntu系统中用c语言编写简单程序
  20. openGauss数据库源码解析系列文章——openGauss开发快速入门(二)

热门文章

  1. c++以空格分开的输入数组_技术贴,MATLAB矩阵与数组汇总讲解!
  2. html文本框 控件,标签和文本框都用于显示文本
  3. python表达式3 5_python3 第五章 - 什么是变量、运算符、表达式
  4. 设计灵感|各种孟菲斯风格海报,让你眼花缭乱
  5. python进程socket通信_python实现多进程通信实例分析
  6. 初二物理模型有哪些_老师整理的初二学习方法!自己看完转给孩子看
  7. C++ static关键字作用讲解
  8. 垃圾回收算法_Java 垃圾回收算法与几种垃圾回收器
  9. Django:Django简介,MTV,Django常用命令
  10. Python库:time库