如何防止MVC控制器中的并发访问?

Gib*_*boK 7 .net c# asp.net-mvc asp.net-mvc-4

我有一个可在特定URL访问的MVC控制器,在调用时,它会运行一系列耗时的过程(从数据库后处理数据).

我需要确保当用户调用该方法时,该过程开始一次.如果任何其他用户在后处理运行时访问该特定URL,则不会同时进行后处理.

我的问题:

  • 我应该在C#中使用吗?
  • 我应该在DB中使用一些像inProgress标志,那么我可以在处理开始和结束时进行标记吗?
  • 还有其他方法吗?

Joa*_*son 5

如果要扩展到多台计算机,则内存锁定不是一种选择,但数据库中的锁定可能是最简单的.

例如,您可以创建一个具有唯一ID字段的锁定表.当您收到请求时,尝试插入ID为1的行.如果成功,则后处理并删除密钥.

在另一次运行期间,当密钥存在时尝试插入密钥的任何其他请求将使插入失败并且不运行作业.