如果我创建一个静态属性MyLanguage
并且一个请求将其值设置为1
,同时另一个线程将其设置为2
- 的最终值是MyLanguage
多少?
单个MyLanguge
属性是否在 ASP.NET 会话之间共享?
静态属性/字段在应用程序域中共享。因此,您的所有会话都应该看到相同的值。
唯一的例外是当您在静态字段上使用ThreadStatic属性时,在这种情况下,每个线程都会看到自己的值。例如
[ThreadStatic]
static int counter = 0; // each thread sees a different static counter.
它将是 2。静态字段、属性在对象之间共享。因此,最新的设置值将更新所有实例。
来自 MSDN
使用 static 修饰符声明一个静态成员,该成员属于类型本身而不是特定对象。static 修饰符可以与类、字段、方法、属性、运算符、事件和构造函数一起使用,但不能与索引器、析构函数或类以外的类型一起使用。了解更多信息
静态对于应用程序域是唯一的,该应用程序域的所有用户将共享每个静态属性的相同值。
当您看到静态一词时,请想“只有一个实例”。该实例持续多长时间是一个单独的问题,但简短的回答是它是可变的。
如果要存储特定于用户的值,请查看Session State。