我通过使用PokiIn库将通知推送到客户端,在我的MVC Web应用程序中实现COMET。如何通过其方法同步对类的私有静态字段的访问?
每当客户端连接,ClientID的是在CometWorker类的OnClientConnected事件可供选择:
public static Dictionary<int, string> clientsList
= new Dictionary<int, string>();
public static string clientId = "";
static void OnClientConnected(string clientId,
ref Dictionary<string, object> list)
{
BaseController.clientId = clientId;
}
我分配在处理程序接收控制器的静态客户端Id的ClientID的。然后当处理器的动作被调用时,我这个clientid映射到的身份登录的用户: -
public ActionResult Handler()
{
if (User.Identity.IsAuthenticated)
{
if (clientsList.Keys.Contains(currentUser.UserId))
clientsList[currentUser.UserId] = clientId;
else
clientsList.Add(currentUser.UserId, clientId);
}
return View();
}
由于多个请求将由不同的线程在服务器上提供服务,每次都会访问静态客户端Id在这两种方法。
如何同步其访问权限,以便在两种方法(OnClientConnected和Handler)中直接完成一个请求,另一个请求等待它?
请告诉我,如果我的问题不清楚。我会尽力进一步改进。
可能重复(http://stackoverflow.com/questions/5441657/how-can-i-lock-a-private-static-field-of-a-class-in-one-static-method-and-then-re) – 2011-03-26 13:38:20