2010-02-16 3 views
2

내가 M.Concat이 스레드 작업이 코드 스레드인가, 아니면 내가 왜

public static class M 
{ 
    public static string Concat(string a, string b) 
    { 
     return N.AddOne(a, b); 
    } 
    public static string Concat2(string a, string b) 
    { 
     return SomeThreadSafeMethod(a, b); 
    } 
} 

public static class N 
{ 
public static string AddOne(string a, string b) 
    { 
     return a+b+1; 
    } 
} 

가 있다고 말 Url.Helper과 우려는 무엇입니까? M.Concat2는 어떻게됩니까? SomeThreadSafeMethod가 다중 스레드 컨텍스트에서 다른 a 또는 b를 사용하여 호출 할 수 있습니까?

이 질문을하는 이유는 C#이 스레딩을 다루는 방법, 특히 이 M.Concat2 인 경우를 더 잘 이해하고 싶기 때문입니다.

둘째 나는 Asp.net MVC 함께 일하고 난 우려 오전 나는 Html.ActionLink 또는 RouteLink이있는 경로로 호출 할 때 변수 뭔가 간단한 같은
Html.ActionLink("Test", "Index", "Test", new { Model.Id, Model.State}) 

같은 때 같은 페이지를 치는 여러 사용자 , 그들 각각은 다른 주를 얻을 것입니다. 스레드 안전하지 않으면 의도 한 경로와 다른 경로로 되돌아 갈 수 있습니다.

답변

2

Concat 메서드는 변수를 설정하지 않기 때문에 절대적으로 스레드로부터 안전합니다. Concat2은 호출하는 방식 때문에 스레드로부터 안전합니다. Model 속성 만 전달하면 매번 다른 모델 인스턴스가 생성됩니다. 잠금없이 정적 변수를 설정하면 유일한 문제는 SomeThreadSafeMethod 방법 일 수 있습니다.

2

예, 코드는 스레드 안전하고 reentrant입니다.

관련 문제