C# 在并行测试运行中访问非静态类中的静态属性

C# 在并行测试运行中访问非静态类中的静态属性,c#,selenium,parallel-processing,C#,Selenium,Parallel Processing,我知道如果我有一个具有静态属性的静态类,那么该状态将与正在运行的所有线程共享 1) 但是假设我有一个具有静态属性的非静态类,那么该静态属性(每次登录都会更改,即会话_令牌)会在所有线程之间共享吗 如果它是共享的,那么会话变量之类的东西就不能存储在静态属性中 2) 怎么做呢?1) 静态变量在类的所有实例中共享,无论类是否是静态的 在这个问题上可以找到更好的解释: 2) 会话变量可以存储在static中。仅仅因为它们是全局的,并不意味着它们是不可变的,只要在会话ID更改时更改静态属性即可。我的第一

我知道如果我有一个具有静态属性的静态类,那么该状态将与正在运行的所有线程共享

1) 但是假设我有一个具有静态属性的非静态类,那么该静态属性(每次登录都会更改,即会话_令牌)会在所有线程之间共享吗

如果它是共享的,那么会话变量之类的东西就不能存储在静态属性中

2) 怎么做呢?

1)

静态变量在类的所有实例中共享,无论类是否是静态的

在这个问题上可以找到更好的解释:

2)


会话变量可以存储在static中。仅仅因为它们是全局的,并不意味着它们是不可变的,只要在会话ID更改时更改静态属性即可。

我的第一个直觉:静态属性不应该因静态/非静态类而有所不同(注意:我不确定,这只是一个猜测)。然而,以某种静态值存储会话数据似乎不是一个好主意。您可以将其存储在静态属性中,但我建议使用具有某种字典行为形式的静态类,仅检索特定请求的项,而不检索没有适当指示的整个用户数据静态任何内容都是共享的,无论它是否在静态类中。如果每个线程都需要一些东西,请查看ThreadLocal,但我认为您无法将其用于会话相关的东西。当谈到使用共享时,ASP是一个不同的野兽state@H.J.Meijer即使我使用了字典,线程也会覆盖每个键。@pinkfloydx33是的,我有20个静态字符串,属性为
[ThreadStatic]
但我认为这不是一种优雅的方法。ThreadStatic属性与ThreadLocal类不同。该属性仅适用于我相信的字段;它还将只初始化一次值(对于第一个线程),其余的由您决定。ThreadLocal是我的首选。假设我有
静态字符串会话\u令牌
,当我有一个线程运行时,这就可以了。当我有>1个线程(T)写入
session\u令牌时,T2覆盖T2,它们都将使用T2,并且我的测试被拧紧。在这种情况下,我不会使用static,因为static的要点是它是全局的。您可以尝试使用一个静态的初始会话ID,然后为第一个会话ID之后的任何实例创建一个新的非静态会话ID。