私は次のローカルメソッドを持っているパブリック静的クラスで:このパブリックメソッドその静的メソッド間の呼び出し - スレッドの安全性を脅かすでしょうか?
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);
}
注:このメソッドは、クラス内のパブリックメソッドの一部(例えば)によって呼び出され
private static int GetMaxFromList(IEnumerable<int> list)
{
var result = 0;
foreach (var i in list)
{
if (i > result) result = i;
}
return result;
}
クラス内の別のパブリックメソッドを呼び出します。
クラスメソッドは、パラメータを介して送信されたデータでのみ動作しますが、静的メソッド間の呼び出しによってスレッドの安全性が損なわれることが懸念されます。私は心配する権利はありますか?
このコードは、.NET 2.0プロジェクトに存在します。
スレッドセーフではないが静的メソッド(静的)オブジェクト/メソッドにアクセスする場合のみ、あなたが言及しているとおり、メソッドはそれに提供されているリストのみを使用します。呼び出し中に提供される 'list '(' tableAndColumnIndexes.Value')が変更された場合、問題が発生する可能性があります。 –
btw、 'tableAndColumnIndexes.Value.Max()'も参照してください。 'GetMaxFromList'メソッドは不要です。 –
スレッドセーフは、* whole *プログラムの*グローバル*プロパティです。個々のメソッドを見て、スレッドセーフであると判断し、プログラム全体がスレッドセーフであると判断することはできません。あなたは個々のレンガを見ることはできません、それらのどれも中空ではないことを発見し、それらのレンガから作られた家も空ではないと結論づけます。 –