繁体   English   中英

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

[英]How to prevent concurrent access in MVC Controller?

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

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

我的问题:

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

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

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

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

每个并发请求都有自己的线程。

这是使线程安全所需的正在进行的任务集。 此资源将是共享的,因此多个Web请求将尝试同时访问。

.Net 4.0以后有并发集合,让您的生活更轻松。 你需要的是一个并发集,但不存在这样的类。 您可以使用ConcurrentDictionary,只使用请求ID的键。

这假设您只有一个Web服务器,否则您将需要数据库或共享服务解决方案。

更确切地说:它们是线程安全的,因为为每个请求创建了新的控制器。 2个请求不共享一个控制器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM