静态类访问Session

时间:2016-07-23 15:50:19

标签: asp.net c#-4.0

我的课程中包含了我使用的所有会话变量,请告诉我它是否是线程安全的。

    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时,它将是线程安全的。

1 个答案:

答案 0 :(得分:0)

是的。每个请求都有自己的会话,会话是线程安全的,因为:

“会话状态模块实现读取器/写入器锁定机制并将对状态值的访问排队。具有会话状态写访问权限的页面将在会话上保持写入器锁定,直到请求终止。”

请参阅https://msdn.microsoft.com/en-us/library/aa479041.aspx?f=255&MSPPError=-2147217396