나는 다음과 같은 지역의 방법이 :이 방법은 클래스 (예) 내에서 대중 몇 가지 방법에 의해 호출정적 메서드 사이의 호출 - 스레드 안전성이 저하 될까요? 공공 정적 클래스에서
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);
}
참고이 공용 방법은 그 또한 클래스 내의 다른 public 메서드를 호출합니다.
클래스 메서드는 매개 변수를 통해 데이터를 보낸 경우에만 작동하지만 정적 메서드 간 호출이 스레드 안전을 엉망으로 만들 것이라고 걱정됩니다. 나는 걱정할 권리가 있니?
이 코드는 .NET 2.0 프로젝트에 있습니다.
정적 메서드가 스레드로부터 안전하지 않은 (정적 인) 개체/메서드에 액세스하는 경우에만 언급 한대로 메서드는 제공된 목록 만 사용합니다. 호출 중에 'list'가 제공되면 ('tableAndColumnIndexes.Value') 문제가 발생할 수 있습니다. –
btw,'tableAndColumnIndexes.Value.Max()'참조 -'GetMaxFromList' 메쏘드가 필요 없음 –
스레드 안전성은 * 전체 * 프로그램의 * global * 속성입니다. 개별 메소드를 살펴보고 각 메소드가 스레드 세이프인지 결정할 수없고 전체 프로그램이 스레드 세이프라고 결론 내릴 수 없습니다. 개별 벽돌을 볼 수없고 그 중 어느 것도 속이 빈 것을 발견 할 수 없으며 그 벽돌로 만든 집 또한 움푹 파이지 않을 것이라고 결론 내릴 수 있습니다. –