这个c#类/方法线程安全且并发访问是否安全?

时间:2013-10-04 21:52:40

标签: c# class methods static thread-safety

在下面的代码中,附件对象是否是线程安全的?如果调用代码在应用程序运行多个线程时对附件对象进行更改,可能会发生什么?

感谢。

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
        }
    }
}

1 个答案:

答案 0 :(得分:2)

  

在下面的代码中,附件对象是否是线程安全的?如果调用代码在应用程序运行多个线程时对附件对象进行更改,可能会发生什么?

没有任何迹象表明此处attachments是线程安全的。如果其他线程可以访问这些实例,并更改这些对象中的属性,则可能会发生错误。

一个简单的例子 - 如果实际的可枚举恰好是List<T>,而另一个线程添加或删除了一个附件,foreach循环将因为底层集合发生变化而抛出枚举。