2013-09-05 3 views
0

대리인이 처음인데 다음 코드가 문제가되는지 확인하고 싶습니다. 코드 나는 공유 변수를 사용하지 않는 기록하지만 대리자의 새 인스턴스마다 생성되기 때문에, 나는 코드가 잘 작동합니다 가정입니다멀티 스레드 응용 프로그램에서 대리인

 public delegate void delSaveData(string data1, string data2); 
    private static delSaveData _delSaveData; 
    static void Main(string[] args) 
    { 
     Thread td1 = new Thread(td1func); 
     Thread td2 = new Thread(td2func); 
     td1.Start(); 
     td2.Start(); 

    } 
    private static void td1func() 
    { 
     while(true) 
     { 
      // do some operation 
      _delSaveData= new delSaveData(SaveData); 
      _delSaveData("someValueFromtd1", "someValueFromtd1"); 
     } 
    } 
    private static void td2func() 
    { 
     while(true) 
     { 
      // do some operation 
      _delSaveData= new delSaveData(SaveData); 
      _delSaveData("someValueFromtd2", "someValueFromtd2"); 
     } 
    } 
    private static void SaveData(string test1, string test2) 
    { 
     //Save Data in database 
    } 

에 따라 같은 공유 대리자를 사용했다. 내가 맞습니까? 작성된 위임 인스턴스 중 하나에서 문제가 발생하면 다른 인스턴스에 영향을 미치나요? 답변에 미리

감사합니다, 당신이 위임하는 핸들러 (추가 또는 제거)를 수정하지 않는 모든

+0

네가 맞아, 왜 여기에 델리게이트가 필요한거야? 그냥 SaveData를 호출하면 될거야. – Jodrell

+0

안녕하세요. 위임을 이해하는 데 필요한 테스트입니다. 물론 직접 함수를 호출 할 수 있습니다. – sam

답변

0

위임의 새 인스턴스가 매번 생성되므로 코드가 제대로 작동한다고 가정합니다. 내가 맞습니까?

코드를 실행하려고 시도 했습니까? 무엇을 시도 했습니까? 즉시 문제가 나타나지 않습니다.

다음과 같은 메시지가 표시됩니다. 예외 (대리자를 인스턴스화하거나 실행할 때 발생할 수있는 문제)가 두 스레드에서 모두 처리되지 않으면 처리되지 않습니다. 한 스레드의 예외는 다른 스레드에 영향을 미치지 않습니다. 그래서 "아니오"가 잘못되면 다른 인스턴스에 영향을 미치지 않습니다.

1

첫째. 그렇다면 항상 새로운 것을 만들어야하는 이유는 무엇입니까?

private static readonly delSaveData _delSaveData = new delSaveData(SaveData); 

다음이 괜찮을보십시오. 원하는 수의 스레드에서 사용할 수 있습니다.

문제가 발생하면 어떨까요?

무엇이 잘못 되었나요? 당신이 여기서 무엇을 의미하는지 확실하지 않습니다.

관련 문제