【发布时间】:2019-07-06 15:54:35
【问题描述】:
我想在一个MVC网站中为应用功能创建一个比较简单的定时事件调度功能,目前不一定针对用户,但将来可能会。我目前的愿望是使用时间表根据定时事件对网站进行特定更改。大致思路如下文末。
我首先研究了用于 asp.net 的 Quartz,因为它在其他帖子中被推荐,但该开源包中的建议特别建议不要在嵌入式模式下使用它。我认为我不能将它作为服务添加到托管 MVC 站点的服务器。
虽然我熟悉多线程的概念,但我对它没有经验。在后台线程上运行下面的 Timer Process 是一个很好的解决方案,还是我应该看其他东西?我假设 Timer Process 将永远执行,将计划与系统时钟进行比较,并在时间触发发生时运行所需的事件代码。
如果线程是一个坏主意,请告诉我应该去哪里看。如果线程是正确的想法,任何建议或警告将不胜感激。我现在正在阅读线程。
我有几个具体问题:
1) Should the individual event code run on the same thread, or does it matter?
2) How do I handle the problem others have suggested occurs if 'IIS kills the thread' or the 'app pool is recycled'.
3) Is it a wrong idea that I send some message to the MVC site that triggers the Timer Process to overcome the issues in #2 above?
4) Is there a way to force a page to automatically refresh with a new display when the timer event occurs? That doesn't seem to be the way asp.net MVC normally works.
最后,这听起来像是其他人可能已经解决并简化为 asp.net MVC 的开源解决方案的问题。当我浏览 Nu-Get 时,有一些似乎描述了这个问题,但它们的下载量很少。这条路线有什么建议吗?
【问题讨论】:
-
对于 Asp.NET Core,请查看 IHostedService。
-
恕我直言,一些
cron作业甚至是单独 Windows 调度程序作业 - 本质上,在/从 Web 应用程序外部/分离,用于你已经研究过的原因。不确定您所说的“配置更改”是什么意思——通常这些更改会触发应用重启。 -
@EdSF 我假设您指的是“使用新配置刷新”-我的措辞选择不当-我会纠正它。想问一下如何强制刷新页面。例如,根据一天中的时间更改显示的图片。我试图了解如果页面上的某些工件应该在给定时间更改,如何强制页面重新显示,这是我了解如何获得可靠的计时器事件后我必须完成的下一个任务发生。感谢您提出在 MVC 应用程序之外完成计时的建议。
-
@Alan - “页面刷新”是一些客户端/最终用户的事件。定时过程(没有用户)有什么价值?如果您说“重置”/“无效”某些缓存资源(图像),那么也许这就是您应该寻找的地方(?)。如果只是基于某种逻辑评估的动态显示,那听起来也不需要额外的“工作”吗?
-
@Alan 那么所有这些都是客户端(Javascript)-您希望在客户端触发(轮询)。您也可以查看SignalR
标签: c# asp.net-mvc multithreading timer