【发布时间】:2011-07-17 10:27:39
【问题描述】:
我有一个包含静态集合的类,用于将登录用户存储在 ASP.NET MVC 应用程序中。我只想知道下面的代码是否是线程安全的。每当我向 onlineUsers 集合添加或删除项目时,我是否需要锁定代码。
public class OnlineUsers
{
private static List<string> onlineUsers = new List<string>();
public static EventHandler<string> OnUserAdded;
public static EventHandler<string> OnUserRemoved;
private OnlineUsers()
{
}
static OnlineUsers()
{
}
public static int NoOfOnlineUsers
{
get
{
return onlineUsers.Count;
}
}
public static List<string> GetUsers()
{
return onlineUsers;
}
public static void AddUser(string userName)
{
if (!onlineUsers.Contains(userName))
{
onlineUsers.Add(userName);
if (OnUserAdded != null)
OnUserAdded(null, userName);
}
}
public static void RemoveUser(string userName)
{
if (onlineUsers.Contains(userName))
{
onlineUsers.Remove(userName);
if (OnUserRemoved != null)
OnUserRemoved(null, userName);
}
}
}
【问题讨论】:
-
顺便说一句 - 这些代码都不是异步的......问题标题令人困惑
-
我认为这些成员不应该是静态的。你背后的原因是什么?
-
@Marc,你是对的。异步与此无关。当我输入问题时,我有点搞砸了:)
标签: c# .net multithreading concurrency locking