【问题标题】:Best way to implement a Timer Rest API in C#在 C# 中实现 Timer Rest API 的最佳方法
【发布时间】:2017-03-26 20:33:12
【问题描述】:

我必须实现一个应用程序来计算任务的时间。例如,一个用户可以启动和停止一个确定的任务,我必须知道他花在这个任务上的时间。我可以存储和计算开始和结束时间,但我想知道是否有可能在 C# 中实现一个具有三种方法的 REST API,以便我的应用程序可以使用 Web 服务“调用它”。

  • StartTimer():当用户在某些应用程序中按下开始按钮时,此 API 方法将被“调用”并且计时器开始计时。 4 小时后,如果用户没有关闭任务(“StopTime()”方法未被“调用”),我想做“某事”。

  • CurrentTime():返回实际花费的时间

  • StopTime():当用户按下停止按钮时,将“调用”此 API 方法,计时器停止,返回计时器值

我做了一些研究,发现了一些关于 System.Timers.Timer 和 System.Threading.Timer 的信息。我想知道使用其中一个(什么是最适合这种情况的?)可能是一种好方法或最好的方法是什么?

【问题讨论】:

  • 这个任务不适合 REST,REST 是无状态的,这意味着不知道以前的请求,当然你可以创建一个服务,静态类或任何你想要的,但它不是完成此类任务的理想交通工具。另外,请考虑可伸缩性,如果有一天您的 REST API 需要在集群中平衡,除非您创建复杂的基础架构(假设在服务器 A 中调用 Start 并在服务器 B 上调用 Stop),否则它将无法工作。对于这样的任务,最好使用 WebSockets 之类的东西,因为它会在消费者使用 API 时保持连接。

标签: c# multithreading rest api timer


【解决方案1】:

如果您想将计时器放在网络服务器上,您可以执行以下操作:

StartTimer 方法 - 在数据库中使用 [StartTime] 字段创建计时器实体 CurrentTime 方法 - 通过 id 查找计时器实体,计算花费的时间,如 (CurrentTime - StartTime) StopTimer - 通过 id 查找计时器,将其标记为已停止,重新调整计时器值

此外,您需要按计划(即每 5 分钟)运行的后台工作人员并检查超时的计时器(在您的情况下为 4 小时)。这些工作人员应该“做一些事情”,比如向用户发送电子邮件。

如果您需要在 4 小时后准确停止计时器,请修改后台工作人员:

1) 查找耗时 3 小时 55 分钟或更长时间的计时器

2) 使用 System.Threading.Timer 来完成它

【讨论】:

    猜你喜欢
    • 2013-05-08
    • 1970-01-01
    • 2020-05-29
    • 2015-11-28
    • 1970-01-01
    • 2013-10-23
    • 1970-01-01
    相关资源
    最近更新 更多