I am new to parallel programming in C# 4.0. I understand that Parallel Programming and Multithreading are two different things. Now in TPL if I create a task like below:
Task<int> task1 = new Task<int>(() => {
for (int i = 0; i < 100; i++) {
sum += DoSomeHeavyCalculation(i);
}
return sum;
});
// start the task
task1.Start();
How will this work in the core 2 duo processor. I am a开发者_如何学编程ctually trying to get my concepts clear.
The calculation for task1
will be executed on single thread, different* from the one you're currently on. What actually happens depends on the code below the one you posted.
If there's nothing there and it's in the main method, the task will probably stop in the middle.
If there's
task1.Wait()
or something usingtask1.Result
, the current thread will wait until the task is finished and you won't get any performance benefits from using TPL.If there's some other heavy calculation and then something from the previous point, those two computations will run in parallel.
If you want to run a for
loop in parallel, using all your available cores, you should use Parallel.For
or PLINQ:
ParallelEnumerable.Range(0, 100).Select(DoSomeHeavyCalculation).Sum()
* In fact, the task can run on the same actual thread, under some circumstances, but that's not relevant here.
精彩评论