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

本文关键字:安全 并发 访问 是否 线程 方法 | 更新日期: 2023-09-27 18:34:09

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

谢谢。

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

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

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

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

一个简单的例子 - 如果实际的枚举恰好是一个List<T>,并且另一个线程添加或删除附件,则由于底层集合更改,foreach循环将在枚举时抛出......