Ответ 1
Да. Parallel.For
не будет возвращаться до завершения всех операций.
Если вы запустите
Parallel.For(0, 5, i => Console.WriteLine("First {0}", i));
Console.WriteLine("First Finished");
Parallel.For(0, 5, i => Console.WriteLine("Second {0}", i));
Console.WriteLine("Second Finished");
Выходной сигнал
First 0
First 2
First 1
First 4
First 3
First Finished
Second 0
Second 4
Second 3
Second 2
Second 1
Second Finished
Порядок целых чисел будет меняться, но второй всегда будет после первого.