在下面的代码中,附件对象是否是线程安全的?如果调用代码在应用程序运行多个线程时对附件对象进行更改,可能会发生什么?
感谢。
public static class Util {
public static int AddMessage(string message, IEnumerable<FileAttachment> attachments, Dictionary<int, object> customFieldValues = null, int? assigneeUserId = null) {
foreach (FileAttachment current2 in attachments) {
//do something
}
}
}
答案 0 :(得分:2)
在下面的代码中,附件对象是否是线程安全的?如果调用代码在应用程序运行多个线程时对附件对象进行更改,可能会发生什么?
没有任何迹象表明此处attachments
是线程安全的。如果其他线程可以访问这些实例,并更改这些对象中的属性,则可能会发生错误。
一个简单的例子 - 如果实际的可枚举恰好是List<T>
,而另一个线程添加或删除了一个附件,foreach
循环将因为底层集合发生变化而抛出枚举。