c# - 如何实现每小时运行一次但也可以从 .aspx 页面触发的作业?

标签 c# asp.net singleton timer global-asax

我需要一种经常运行的方法来进行一些数据库处理。但是,我可能需要它由网站上的管理员触发。但我不希望此方法同时运行多次,因为这可能会导致它访问数据库的方式出现问题。

例如,我可以...

创建一个在计时器上运行该方法的单例类,并在 global.asax 文件中对其进行实例化。然后,因为它是单例,所以我可以从我的普通 .aspx 页面调用它,并在需要时随时调用该方法。我可能需要使用 C# 的“锁定”功能来检查该方法是否已在运行。

我最近听到有人说单例是“邪恶的”,但这似乎非常适合它。你怎么认为?提前致谢。

最佳答案

计时器和锁(旨在同步对数据库的访问)在网络上不是一个好主意;您可能在不同的服务器上有零个、一个或多个应用程序池。它们可以随时回收,直到需要时才会启动。基本上,这不会阻止您从多个来源攻击数据库。

就个人而言,我很想写一个服务来完成这项工作(数据库轮询或通过 WCF 等),或者使用数据库(SP 或类似的)——在表行中设置一个标志说“进行中”,在数据库中进行工作,并清除标志(重复尝试在进行中立即退出)。

关于c# - 如何实现每小时运行一次但也可以从 .aspx 页面触发的作业?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/666178/

相关文章:

c# - Response.End() 后刷新页面内容

c# - 在控制台应用程序 C# 中实现单例的最佳方式?

c++11 - 为什么允许复制对象的单例设计模式甚至复制构造函数和赋值运算符都是私有(private)的?

c# - 带有 Entity Framework Core 的 SQLite 脚手架

c# - 使用 WebClient C# 添加请求 header

c# - 在 MVC3 中的每个 Action 之前运行一个方法

java - 枚举单例如何运作?

c# - 在MVC3的下拉列表中设置所选项目

c# - MIDI 声音仅在一个 channel (左或右)

c# - 在 session 或缓存中保存值 - 区别?网络平台