我可以在ObjectCache中存储System.Timers.Timer以供以后访问吗?

问题描述 投票:0回答:1

我需要为我的工作实施以下要求。

  1. 当用户启动新应用程序时,将启动一个5分钟的计时器。
  2. 如果用户在5分钟之前对应用程序进行了任何编辑,则取消定时器。
  3. 如果计时器运行完成,则会向我们公司发送一封电子邮件(“已创建但已放弃的应用程序”)。

此项目的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的方法来实现这一要求?对这个问题的模糊范围表示歉意;虽然我不熟悉与计时器合作可能会妨碍我的搜索,但我对谷歌没有运气或搜索过。

谢谢!

c# .net asp.net-mvc timer objectcache
1个回答
0
投票

问题的根源是架构。您应该更多地考虑服务器端的设计方式以及客户端设计和服务器端设计如何相互补充。对于初学者来说,持久状态,运行某些后台任务的能力以及在访问持久状态时使用锁定功能(例如C#的lock关键字)将有助于产生更具可扩展性和灵活性的设计。如何设计这些功能以及客户端如何与之交互取决于您。一种方法是让API控制器写入持久状态,使用锁定来防止并发写入,然后使用后台任务监视持久状态并在必要时触发某些操作。玩弄设计并找出适合您需求的设计。祝你的申请顺利。

© www.soinside.com 2019 - 2024. All rights reserved.