c# - 如何防止 MVC Controller 中的并发访问?

标签 c# .net asp.net-mvc asp.net-mvc-4

我有一个可通过特定 URL 访问的 MVC Controller ,调用该 Controller 时会运行一系列耗时的过程(来自数据库的后处理数据)。

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

我的问题:

  • 我应该使用 locks 吗?在 C# 中?
  • 我是否应该在数据库中使用一些类似 inProgress 的标志,以便标记处理的开始和结束时间?
  • 还有其他解决方案吗?

最佳答案

如果你想扩展到多台机器,内存锁不是一个选择,但数据库锁可能是最简单的。

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

在另一次运行期间存在 key 时尝试插入 key 的任何其他请求都将导致插入失败并且不会运行作业。

关于c# - 如何防止 MVC Controller 中的并发访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23959771/

相关文章:

c# - 防止来自 3rd 方组件的异常使整个应用程序崩溃

c# - 除了使用 P/Invoke 之外,如何在 hBitmap 上调用 DeleteObject()?

c# - 如何在 C# 中读取 .xls 和 .xlsx 以及 .xlsm 文件

c# - 创建可读的 FxCop 报告

c# - 由于 DataGridViewImageColumn,DataGridView 在默认错误对话框中抛出异常

javascript - MVC 验证后执行 Ajax

c# - 每个站点所有打开的选项卡仅浏览器通知一次

asp.net-mvc - MVC 中的模型是什么。我是否应该将其理解为对其中包含的数据的观点的反射(reflect)?

c# - 将 InMemory 编译程序集加载到当前域

c# - Xamarin Forms PCL 如何从 iOS customRenderer 进行 PushAsync