In einer öffentlichen statischen Klasse haben die folgende lokale Methode:Rufe zwischen statischen Methoden - wird das die Sicherheit von Folienfäden verbessern? Ich
private static int GetMaxFromList(IEnumerable<int> list)
{
var result = 0;
foreach (var i in list)
{
if (i > result) result = i;
}
return result;
}
Diese Methode wird von einigen der öffentlichen Methoden innerhalb der Klasse (Beispiel) genannt wird:
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);
}
Beachten Sie, dass diese öffentliche Methode ruft auch eine andere öffentliche Methode innerhalb der Klasse auf.
Die Klassenmethoden funktionieren nur mit Daten, die über Parameter an sie gesendet werden, aber ich bin besorgt, dass die Aufrufe zwischen den statischen Methoden die Threadsicherheit durcheinander bringen. Habe ich recht, mir Sorgen zu machen?
Vergessen Sie zu erwähnen, dass sich dieser Code in einem .NET 2.0-Projekt befindet.
Nur wenn die statischen Methoden auf (statische) Objekte/Methoden zugreifen, die nicht threadsicher sind, aber wie Sie erwähnen, verwendet die Methode nur die Liste, die ihr zur Verfügung gestellt wird. Ein Problem könnte auftreten, wenn die angegebene 'liste' (' tableAndColumnIndexes.Value') während des Aufrufs geändert wird. –
BTW, siehe auch: 'tableAndColumnIndexes.Value.Max()' - keine Notwendigkeit für Ihre 'GetMaxFromList' Methode –
Thread-Sicherheit ist eine * globale * Eigenschaft des * gesamten * Programms. Sie können nicht einzelne Methoden betrachten und entscheiden, dass jeder von ihnen threadsafe ist und schlussfolgern, dass das ganze Programm threadsafe ist. Man kann nicht einzelne Ziegel betrachten, entdecken, dass keine von ihnen hohl sind, und schlussfolgern, dass das aus diesen Ziegeln gebaute Haus auch nicht hohl sein wird. –