using System.Threading.Tasks;
var options = new ParallelOptions() { MaxDegreeOfParallelism = 2 };
Parallel.For(0, 10, i => ExecTaskSync(i));
Parallel.For(0, 10, async i => await ExecTask(i));
Console.WriteLine("ALL DONE.");
async Task<int> ExecTask(int index)
Console.WriteLine("Task {0} starting.", index);
Console.WriteLine("Task {0} done.", index);
int ExecTaskSync(int index)
Console.WriteLine("Sync Task {0} starting.", index);
Console.WriteLine("Sync Task {0} done.", index);