我需要为我的工作实现以下要求。
- 当用户启动一个新应用程序时,一个 5 分钟的计时器开始计时。
- 如果用户在 5 分钟结束之前对应用程序进行了任何编辑,则计时器将被取消。
- 如果计时器运行完毕,则会向我们公司发送一封电子邮件(“创建了一个应用程序但已放弃”)。
此项目的 Web 服务器是一个 .NET MVC 项目,但除了 Home Controller 之外,所有控制器都继承自 System.Web.Http.ApiController 而不是 System.Web.Mvc.Controller。前端是Angular 6。
启动一个 5 分钟计时器似乎很容易,它将在 5 分钟后执行“电子邮件发送”方法。如果用户在计时器用完之前编辑应用程序,我就无法实现取消计时器的功能。启动应用程序和任何后续编辑的命令将作为对 API 的单独查询,因此我没有从调用到调用维护任何状态。
我目前的想法是在应用程序启动时通过 System.Timers.Timer 创建计时器,并将计时器存储在代表该特定应用程序的唯一 ID 下的 ObjectCache 中。然后,当调用编辑操作时,我可以检查缓存以查看是否存储了与正在编辑的应用程序匹配的计时器,如果是,则取消计时器。如果在 5 分钟内没有接到这样的电话,计时器将触发并发送电子邮件。
这行得通吗?(两者都能够访问定时器来取消它,如果没有取消,定时器会按预期触发?)是否有更好或更适合 .NET 的方法来实现此要求?为这个问题的模糊范围道歉;尽管我不熟悉使用计时器可能会阻碍我的搜索,但我在 Google 或搜索 SO 方面没有运气。
谢谢!