这线程安全吗?
public class TestPage
{
private static readonly IList<string> AcceptedItems = new List<string>() { "FOO" };
protected void BuildSomething
{
TestMethod();
}
public static void TestMethod()
{
var ok = AcceptedItems.Contains("FOO")
}
}
答案 0 :(得分:2)
TestMethod
void
财产?或没有“()”的方法?答案 1 :(得分:2)
它是线程安全的,因为AcceptedItems
字段保证在TestMethod中访问之前设置。静态字段初始值设定项在包含类型的static constructor中执行,保证在任何实例构成之前执行,即在调用BuildSomething()
之前,在访问任何其他静态字段之前执行,即在调用TestMethod()
之前。
除此之外,只要List<T>
字段在被访问时未被修改,就可以安全地从多个线程访问AcceptedItems
。您应该知道,将字段标记为readonly
并不会阻止任何人修改列表的内容,因此如果您在其他地方有AcceptedItems.Add(item)
,AcceptedItems.Remove(item)
或类似的代码,然后,如果在不同线程上的代码也在同一列表上运行时,您可能会遇到异常。