2014-11-24 4 views
0

У меня есть несколько методов, которые независимы друг от друга, и мне было любопытно, что это лучший способ выполнить их в одно и то же время. Я пробовал эти способы ниже и приурочен к каждому, и время, похоже, одинаковое по всем направлениям, поэтому я не уверен, что я что-то делаю неправильно ...?Выполнение нескольких методов одновременно

Кроме того, это веб-приложение, и методы вызывается после того, как пользователь нажимает кнопку. C#, ASPX

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 

Третье испытание:

//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

Ваши 3-е и 4-е испытания делают то же самое. Второй тест функционально эквивалентен двум другим.

Ваши методы должны работать параллельно (хотя есть no guarantees).

Вы, кажется, не проводите эти испытания с какой-либо значимой точностью. Попробуйте распечатать сообщения из этих методов в начале и в конце, и я уверен, что вы увидите method2, прежде чем method1 закончит.

+0

Спасибо за информацию. Я думаю, что я также ожидал увидеть, что «method2» будет отображаться на экране перед «method1» из-за более короткого времени, которое требуется для его выполнения. Но то, что в итоге происходит, - оба результата отображаются одновременно на экране после 5-6 секунд моего ручного подсчета. – Jayarikahs

+0

@Jayarikahs Вы печатаете эти результаты из каждого метода индивидуально? Или из вызывающего кода, после 'Task.WaitAll'? – dcastro

+0

В рамках каждого метода я привязываю данные к их собственному gridview, и поэтому результаты будут получены из каждого отдельного метода. – Jayarikahs

Смежные вопросы