Last active
July 27, 2018 01:37
-
-
Save nathanaw/4c2132cbea89b09d3b9b77afa50c874c to your computer and use it in GitHub Desktop.
Parallel.For() Not Async Friendly
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System.Threading.Tasks | |
void Main() | |
{ | |
var options = new ParallelOptions() { | |
MaxDegreeOfParallelism = 2 | |
}; | |
Parallel.For(0, 10, options, i => ExecTaskSync(i)); | |
Parallel.For(0, 10, options, async i => await ExecTask(i)); | |
Console.WriteLine("ALL DONE."); | |
} | |
// Define other methods and classes here | |
async Task<int> ExecTask(int index) | |
{ | |
Console.WriteLine($"Task {index} starting."); | |
await Task.Delay(1000); | |
Console.WriteLine($"Task {index} done."); | |
return index; | |
} | |
int ExecTaskSync(int index) | |
{ | |
Console.WriteLine($"Sync Task {index} starting."); | |
Thread.Sleep(1000); | |
Console.WriteLine($"Sync Task {index} done."); | |
return index; | |
} | |
/********** | |
* OUTPUT * | |
*********** | |
Sync Task 0 starting. | |
Sync Task 5 starting. | |
Sync Task 0 done. | |
Sync Task 1 starting. | |
Sync Task 5 done. | |
Sync Task 6 starting. | |
Sync Task 6 done. | |
Sync Task 7 starting. | |
Sync Task 1 done. | |
Sync Task 2 starting. | |
Sync Task 2 done. | |
Sync Task 3 starting. | |
Sync Task 7 done. | |
Sync Task 8 starting. | |
Sync Task 3 done. | |
Sync Task 8 done. | |
Sync Task 9 starting. | |
Sync Task 4 starting. | |
Sync Task 4 done. | |
Sync Task 9 done. | |
Task 0 starting. | |
Task 5 starting. | |
Task 1 starting. | |
Task 6 starting. | |
Task 7 starting. | |
Task 8 starting. | |
Task 9 starting. | |
Task 3 starting. | |
Task 4 starting. | |
Task 2 starting. | |
ALL DONE. | |
Task 2 done. | |
Task 4 done. | |
Task 9 done. | |
Task 0 done. | |
Task 8 done. | |
Task 3 done. | |
Task 7 done. | |
Task 5 done. | |
Task 6 done. | |
Task 1 done. | |
*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment