ASP.NET MVC 如何使一种方法只能由一个线程同时执行?
Posted
技术标签:
【中文标题】ASP.NET MVC 如何使一种方法只能由一个线程同时执行?【英文标题】:ASP.NET MVC How to make that one method is executed only by one thread simultaneously? 【发布时间】:2020-10-22 19:24:39 【问题描述】:我有一个从 ActionResults 方法调用的静态方法。静态方法调用更新数据库中的共享数据,所以,我需要静态方法只能被每个请求执行,然后在上一次调用完成之前不能再次执行。
方法是这样的:
public static class GeneralSettings
public static string GetSSCC(string precode, int totalDigitNumber)
//Call to database to update data
[...]
return "something"
有什么想法吗?
谢谢!
【问题讨论】:
docs.microsoft.com/en-us/dotnet/csharp/language-reference/… 查看微软的Overview of synchronization primitives 请注意,除非数据库位于运行代码的同一台机器上并且只有一个应用程序实例在运行,否则您不能依靠代码本身的同步来保证数据的一致性.相反,代码和数据库应该考虑如何使用乐观并发等方法处理多个写入者,并更新代码以适当地处理此类场景:en.wikipedia.org/wiki/Optimistic_concurrency_control 谢谢,我认为这些链接可以指导我 【参考方案1】:您应该使用锁或监视器来实现线程同步,即一次只允许一个线程访问一个函数/变量。参考以下文章:
Lock Article
c# Lock Article
【讨论】:
谢谢,当共享数据是内存中的变量时,我已经看到了这些方法,但它也可以用于同步调用数据库的方法? 无论你在 lock 中放了什么......另一个线程必须等待第一个线程以上是关于ASP.NET MVC 如何使一种方法只能由一个线程同时执行?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 ASP.NET MVC 控制器方法返回由 JSON.NET 序列化的 camelCase JSON?