2012-04-22 3 views
3

배열을 Action<string, int, double, double>으로 정의하고 Parallel.Invoke()을 사용하여 병렬로 실행하려고합니다. 액션을 매개 변수가없는 액션으로 캐스팅 할 수있는 방법이 있습니까? 그렇게 할 수 있습니까? 아니면 다른 방법이 있습니까?Parallel.Invoke를 사용하여 매개 변수가있는 메서드 실행

+0

언어 태그를 추가하는 것이 좋습니다. –

답변

5

이 작업을 시도 할 수 :

Parallel.Invoke(() => 
    { 
     YourFirstAction(param1, param2, param3, param4); 
    }, // close first Action 
    () => 
    { 
     YourSecondAction(param1, param2, param3, param4); 
    }//close second Action 
); //close parallel.invoke 
0

난 당신이 매개 변수 값을 전송하지 않고 그들을 실행 괜찮 있다면 작업이 매개 변수를 가질 이유에 혼란 스러워요. 아마 기본값으로 Parallel.ForEach을 사용하는 것이 가장 것 :

Action<string, int, double, double>[] actions; 

// Action array, actions, set somewhere in code. 

Parallel.ForEach(actions, action => action(string.Empty, 0, 0, 0)); 

는 다음 매개 변수를 보내 당신이 맞는 볼의 값을 대체합니다.

Parallel.Invoke : 초 길이 (20)의 배열에 대한

Parallel.For(0, actions.Length, index => actions[index] = (s, i, d1, d2) => Thread.Sleep(100)); 
Parallel.For(0, parameterless.Length, index => parameterless[index] =() => Thread.Sleep(100)); 

결과 :

나는 나의 시험에 대한 다음 작업을 사용 0.3000709

Parallel.ForEach : 0.3022143

일반 루프 : 2.0000706

따라서 Parallel.Invoke는 성능에 약간 영향을 미치지 만 매개 변수가없는 매개 변수가없는 작업을 사용하는 이점이 있습니다.

단지 킥을 위해 Parallel.ForEach를 사용하여 매개 변수가없는 Action 배열을 테스트했는데 그 결과는 Parallel.Invoke와 거의 같았으며 결과는 0.300979 초였습니다.

+0

왜 이것을 downvoted입니까? 이것은 실제로 그의 문제에 대한 해답이 될 수 있습니다 ... –

관련 문제