2014-11-24 4 views
0

나는 서로 독립적 인 몇 가지 메서드가 있는데, 동시에 동시에 실행할 수있는 가장 좋은 방법은 무엇인지 궁금합니다. 나는 아래의 방법을 시도하고 각각 하나씩 시간을 정해 놓은 것처럼 보였으므로 내가 잘못된 것을하고 있는지 확신 할 수 없다 ...?동시에 여러 메서드 실행

또한 웹 응용 프로그램이며 사용자가 단추를 클릭하면 메서드가 호출됩니다. C 번호, 영문

method1(var1, var2, var3); // takes 5 seconds to run 
method2(var1, var2, var3); // takes about 1-2 seconds to run 

첫 시도 :

//Entered my methods one right after another 
method1(var1, var2, var3); 
method2(var1, var2, var3); 
//timed the execution and overall took ~5-6 seconds to run and display results 

번째 시험 :

//used Google and found something called Parallel 
Parallel.Invoke(() => 
{ 
    method1(var1, var2, var3); 
}, 
() => 
{ 
    method2(var1, var2, var3); 
}); 
//~5-6 seconds to run and display results 

번째 시행 (1/3 유사)

//used Google and found something called Tasks 
Task task1 = Task.Factory.StartNew(() => method1(var1, var2, var3)); 
Task task2 = Task.Factory.StartNew(() => method2(var1, var2, var3)); 
Task.WaitAll(task1, task2); 
//~5-6 seconds to run and display results 

넷째 시험 :

//used Google and found something called Tasks 
Task[] tasks = new Task[2] 
{ 
    Task.Factory.StartNew(() => method1(var1, var2, var3)), 
    Task.Factory.StartNew(() => method2(var1, var2, var3)) 
}; 
Task.WaitAll(tasks); 
//~5-6 seconds to run and display results 

모든 조언이나 도움을 주시면 대단히 감사하겠습니다. 감사!

답변

0

세 번째와 네 번째 테스트는 똑같은 작업을 수행합니다. 두 번째 테스트는 기능적으로 다른 두 테스트와 같습니다.

메소드가 병렬로 실행되어야합니다 (no guarantees이 있음에도 불구하고).

의미있는 정밀도로 이러한 테스트의 타이밍을 맞추는 것처럼 보이지는 않습니다. 처음부터 끝까지 해당 메소드 내에서 메시지를 인쇄 해보십시오. method1이 완료되기 전에 method2이 시작되는 것을 확인할 것입니다.

+0

감사합니다. 나는 또한 "method2"가 실행되기까지 걸리는 시간이 짧기 때문에 "method1"전에 화면에 "method2"가 표시 될 것을 기대하고 있다고 생각했습니다. 그러나 일어나는 일은 두 결과가 수동으로 계산되는 5-6 초 후에 동시에 화면에 표시된다는 것입니다. – Jayarikahs

+0

@ Jayarikahs 각 방법 내에서 개별적으로 결과를 인쇄하고 있습니까? 아니면 호출 코드에서,'Task.WaitAll' 후에? – dcastro

+0

각 메서드 내에서 데이터를 고유 한 gridview에 바인딩하므로 각 개별 메서드 내에서 결과가 나옵니다. – Jayarikahs

관련 문제