我有一个可通过特定 URL 访问的 MVC Controller ,调用该 Controller 时会运行一系列耗时的过程(来自数据库的后处理数据)。
我需要确保当用户调用该方法时,进程启动一次。如果任何其他用户在后处理运行时访问该特定 URL,则不会同时发生后处理。
我的问题:
- 我应该使用 locks 吗?在 C# 中?
- 我是否应该在数据库中使用一些类似 inProgress 的标志,以便标记处理的开始和结束时间?
- 还有其他解决方案吗?
最佳答案
如果你想扩展到多台机器,内存锁不是一个选择,但数据库锁可能是最简单的。
例如,您可以创建一个带有唯一 ID 字段的锁表。收到请求后,尝试插入 id 为 1 的行。如果成功,则后处理并删除该键。
在另一次运行期间存在 key 时尝试插入 key 的任何其他请求都将导致插入失败并且不会运行作业。
关于c# - 如何防止 MVC Controller 中的并发访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23959771/