gpt4 book ai didi

c# - 这个 "singleton"在 ASP.NET 应用程序中应该是线程安全的吗?

转载 作者:行者123 更新时间:2023-11-30 16:26:26 25 4
gpt4 key购买 nike

请注意,“单例”在稍微不常见的意义上使用 - “对象作为单个实例可见,如 HttpContext.Current”不同于普通的“具有一个共享实例的对象”。

我为我的 asp.net MVC 应用程序使用单例类型的 UserContext 类。此类允许我将用户数据存储为强类型 session 对象。我遇到了 this CodeReview question并想知道是否有必要关注此应用程序上下文中的线程安全。

这是我的代码的简化:

public class UserContext
{
private UserContext()
{
}

public static UserContext Current
{
get
{
if (HttpContext.Current.Session["UserContext"] == null)
BuildUserContext();

return (UserContext)HttpContext.Current.Session["UserContext"];
}
}

private static void BuildUserContext()
{
if (!user.Identity.IsAuthenticated) return;

var uc = new UserContext { IsAuthenticated = true };

// ...snip...
// Set up user data

// Save it into the session
HttpContext.Current.Session["UserContext"] = uc;
}


#region Class members
public bool IsAuthenticated { get; internal set; }
public string Name { get; internal set; }
// ...snip...
// Other properties

public void Refresh()
{
BuildUserContext();
}

public void Flush()
{
HttpContext.Current.Session["UserContext"] = null;
}
#endregion
}

到目前为止,我还没有遇到任何锁定问题,但目前该站点的访问量不是很高。我应该采用 Jon Skeet 的线程安全模型还是 IIS 为我管理它?

最佳答案

访问Session已经是线程安全的了。

一般来说,只要您以线程安全的方式访问静态属性中的任何共享状态,就不会有任何问题。

关于c# - 这个 "singleton"在 ASP.NET 应用程序中应该是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8806810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com