静态方法之间的调用 - 是否会破坏线程安全性

本文关键字:线程 安全性 是否 之间 调用 静态方法 | 更新日期: 2023-09-27 18:30:53

在公共静态类中,我有以下本地方法:

private static int GetMaxFromList(IEnumerable<int> list)
    {
        var result = 0;
        foreach (var i in list)
        {
            if (i > result) result = i;
        }
        return result;
    }

此方法由类中的某些公共方法调用(示例):

public static bool IsIntegrityOfDataSetGood(DataSet dataSet, KeyValuePair<string, List<int>> tableAndColumnIndexes)
    {
        return IsIntegrityOfDataSetGood(dataSet, tableAndColumnIndexes.Key) &&
               dataSet.Tables[tableAndColumnIndexes.Key].Columns.Count > GetMaxFromList(tableAndColumnIndexes.Value);
    }

请注意,此公共方法还调用类中的另一个公共方法。

类方法仅适用于通过参数发送给它们的数据,但我担心静态方法之间的调用会破坏线程安全性。我担心是对的吗?

忘了提到此代码驻留在 .NET 2.0 项目中。

静态方法之间的调用 - 是否会破坏线程安全性

不,这不会破坏您的线程安全。

但它是否真的是线程安全的取决于tableAndColumnIndexes来自哪里以及其他线程可以访问它。换句话说,它取决于调用代码。

只要没有其他线程更改list序列,就绝对没问题。它不访问任何共享状态 - 它只使用其参数。如果任何其他线程正在修改序列,您将获得InvalidOperationException

听起来你可能对线程安全和静态方法有一些误解,但很难确切地说出它们是什么......你可能会发现Eric Lippert的博客文章"你称之为线程安全的东西是什么?"很有用。