我的课程中包含了我使用的所有会话变量,请告诉我它是否是线程安全的。
public static class AppSession
{
private const string UserIdKey = "UserId";
public static int UserId
{
get { return GetSession<int>(UserIdKey); }
set { SetSession(UserIdKey, value); }
}
private static T GetSession<T>(string key)
{
var currentSession = HttpContext.Current.Session;
if (currentSession == null) return default(T);
if (currentSession[key] != null)
return (T) currentSession[key];
return default(T);
}
}
访问属性AppSession.UserId时,它将是线程安全的。
答案 0 :(得分:0)
是的。每个请求都有自己的会话,会话是线程安全的,因为:
“会话状态模块实现读取器/写入器锁定机制并将对状态值的访问排队。具有会话状态写访问权限的页面将在会话上保持写入器锁定,直到请求终止。”
请参阅https://msdn.microsoft.com/en-us/library/aa479041.aspx?f=255&MSPPError=-2147217396