ASP.Net MVC应用程序中的线程安全全局变量

时间:2013-12-03 09:27:10

标签: c# asp.net multithreading asp.net-mvc-4

我需要在ASP.Net MVC应用程序中实现一个多线程全局变量。

ConcurrentDictionary<T>是理想的,但如何让我的应用程序中的每个用户会话都可以访问它?

这样的事情能做到吗?

public static class GlobalStore
{
    public static ConcurrentDictionary<string, DateTime> GlobalVar { get; set; }
}

我需要多个用户才能读取和写入此对象。

1 个答案:

答案 0 :(得分:4)

您可以使用HttpContext.current.Application,如下所示

创建对象

HttpContext.Current.Application["GlobalVar"] = new ConcurrentDictionary<string, DateTime>();

获取或使用对象

ConcurrentDictionary<string, DateTime> GlobalVar = HttpContext.Current.Application["GlobalVar"] as ConcurrentDictionary<string, DateTime>;

修改

使用静态变量编辑静态类,而不是像

那样属性
public static class GlobalStore
{
    public static ConcurrentDictionary<string, DateTime> GlobalVar;
}

现在在global.aspx Application_Start事件中使用新对象设置该变量,如下所示

GlobalStore.GlobalVar = new ConcurrentDictionary<string, DateTime>();

然后您可以通过

在您的应用程序中使用它
    GlobalStore.GlobalVar["KeyWord"] = new DateTime();
DateTime obj = GlobalStore.GlobalVar["KeyWord"] as DateTime;

是的ConcurrentDictionary以及静态变量在.net应用程序中是线程安全的