Lee*_*Lee 7 c# asp.net-mvc mutex asp.net-mvc-4
我不是MVC专家,但我相信这是可行的; 但是,我不知道如何在MVC 4中做到这一点.
为了进行测试,我使用的是使用VS 2012创建网站时提供的默认Web应用程序.
为简单起见,考虑HomeController.Index()被多个用户完全同时命中(例如3).我想执行一个互斥的方法,因为一次只执行一个; 因此迫使他们连续.我不在乎什么顺序.我知道有关阻止页面的警告,并且所有内容都应该是异步的,但为此我需要阻止很短的时间.
public class HomeController : Controller {
private String dosomething() {
String str;
str = "SomeValue"; //<-- Will vary
return str;
}
public ActionResult Index() {
String str;
// How do I do implement the following, preferably with a timeout to be safe
Lock(dosomething);
str = dosomething();
unLock(dosomething);
return View();
}
Run Code Online (Sandbox Code Playgroud)
如果要一次将执行限制为一个,那么您将需要一个静态锁定对象:
public class HomeController : Controller {
private static object _lockobject = new object();
Run Code Online (Sandbox Code Playgroud)
然后:
public ActionResult Index() {
String str;
lock (_lockobject)
{
str = dosomething();
}
return View();
}
Run Code Online (Sandbox Code Playgroud)
如果您需要超时,那么可以使用Monitor.TryEnter而不是lock:
public ActionResult Index() {
String str;
if (Monitor.TryEnter(_lockobject, TimeSpan.FromSeconds(5)))
{
str = dosomething();
Monitor.Exit(_lockobject);
}
else str = "Took too long!";
return View();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1999 次 |
| 最近记录: |