C#MVC的全局互斥?

C#MVC的全局互斥?,c#,asp.net-mvc,multithreading,C#,Asp.net Mvc,Multithreading,在MVC中,如果我想锁定一个方法,使其一次不会运行超过一次(尽管有多个用户使用该应用程序),我可以只使用一个静态对象: private static Object lock= new Object(); 但在我的例子中,我想创建一个带有名称的锁,因此应用程序将只锁定那些试图使用相同名称的用户 通常在C#中,我会为此使用互斥锁(名称),但在服务器世界中是否有合适的等价物?(对于所有用户,它需要是全局的) 编辑: 这是一个客户端应用程序,而不是一个公共站点-因此一次最多只能有20个用户访问该应用程

在MVC中,如果我想锁定一个方法,使其一次不会运行超过一次(尽管有多个用户使用该应用程序),我可以只使用一个静态对象:

private static Object lock= new Object();
但在我的例子中,我想创建一个带有名称的锁,因此应用程序将只锁定那些试图使用相同名称的用户

通常在C#中,我会为此使用互斥锁(名称),但在服务器世界中是否有合适的等价物?(对于所有用户,它需要是全局的)

编辑:


这是一个客户端应用程序,而不是一个公共站点-因此一次最多只能有20个用户访问该应用程序。

您不希望在服务器端阻止任何内容,您希望的是在满足条件后不在服务器端执行任何内容。它可以通过多种方式处理:错误页面重定向、向客户机通知满足的关键条件等

换句话说,对于选定的用户,处理该特殊条件,但是
不要阻止任何内容

您不希望在服务器端阻止任何内容,您希望的是在满足条件后不在服务器端执行任何内容。它可以通过多种方式处理:错误页面重定向、向客户机通知满足的关键条件等

换句话说,对于选定的用户,处理该特殊条件,但是
不要阻止任何内容

如果您要使用多个web服务器或多个应用程序池工作进程,它将不起作用。听起来像是一个典型的x/y问题。您应该包括为什么要这样做的详细信息。Run-once不能用锁实现-如果对不同方法的请求尝试调用相同的方法,会发生什么情况?或者应用程序池重新启动?每个用户运行一次几乎要求在特定于用户的表上设置一个标志。此外,锁定web服务器会导致崩溃。此外,锁定方法意味着在请求超时之前,客户端永远不会得到响应。客户端可能会重试,导致超时。我认为最重要的是,您需要使用共享的持久数据存储。web应用程序上下文中的静态问题是,应用程序池实际上可以随时重新启动。它通常按计划回收。它可能会崩溃。服务器/IIS可以重新启动等。任何时候,静态变量的状态都会重置。此外,如果您使用web workers,每个worker都有自己独特的应用程序池实例,因此也有自己独特的静态。通过存储在类似SQL Server的东西中,您可以从一个公共数据存储中提取数据。如果您要使用多个web服务器或多个应用程序池工作进程,则无法使用该存储。听起来像是一个典型的x/y问题。您应该包括为什么要这样做的详细信息。Run-once不能用锁实现-如果对不同方法的请求尝试调用相同的方法,会发生什么情况?或者应用程序池重新启动?每个用户运行一次几乎要求在特定于用户的表上设置一个标志。此外,锁定web服务器会导致崩溃。此外,锁定方法意味着在请求超时之前,客户端永远不会得到响应。客户端可能会重试,导致超时。我认为最重要的是,您需要使用共享的持久数据存储。web应用程序上下文中的静态问题是,应用程序池实际上可以随时重新启动。它通常按计划回收。它可能会崩溃。服务器/IIS可以重新启动等。任何时候,静态变量的状态都会重置。此外,如果您使用web workers,每个worker都有自己独特的应用程序池实例,因此也有自己独特的静态。通过存储在类似SQL Server的东西中,您可以从中提取公共数据存储。