我需要一种经常运行的方法来进行一些数据库处理。但是,我可能需要它由网站上的管理员触发。但我不希望此方法同时运行多次,因为这可能会导致它访问数据库的方式出现问题。
例如,我可以...
创建一个在计时器上运行该方法的单例类,并在 global.asax 文件中对其进行实例化。然后,因为它是单例,所以我可以从我的普通 .aspx 页面调用它,并在需要时随时调用该方法。我可能需要使用 C# 的“锁定”功能来检查该方法是否已在运行。
我最近听到有人说单例是“邪恶的”,但这似乎非常适合它。你怎么认为?提前致谢。
最佳答案
计时器和锁(旨在同步对数据库的访问)在网络上不是一个好主意;您可能在不同的服务器上有零个、一个或多个应用程序池。它们可以随时回收,直到需要时才会启动。基本上,这不会阻止您从多个来源攻击数据库。
就个人而言,我很想写一个服务来完成这项工作(数据库轮询或通过 WCF 等),或者使用数据库(SP 或类似的)——在表行中设置一个标志说“进行中”,在数据库中进行工作,并清除标志(重复尝试在进行中立即退出)。
关于c# - 如何实现每小时运行一次但也可以从 .aspx 页面触发的作业?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/666178/