Скрип будет выполняться дольше, у вас спит от в зависимости от итерации.
А итераций 30. В разнобой потому что итерации запускаются не последовательно.
Прогоните вот этот скрипт в LinqPad:
var listt = new List<string>();
System.Threading.Tasks.Parallel.For(0, 30, (iter,state) => {
System.Threading.Thread.Sleep(iter*500);
iter.Dump("Iter");
lock(ListSyncer)
{
listt.Add(iter.ToString());
}
});
P.S. А потом там же прогоните вот это:
static readonly object ListSyncer = new object();
IEnumerable<int> Range(int fromInclusive, int toExclusive)
{
for (var i = fromInclusive; i < toExclusive; i++) yield return i;
}
void Main()
{
var listt = new List<string>();
var range = Range(0, 30);
System.Threading.Tasks.Parallel.ForEach(range, (iter,state) => {
System.Threading.Thread.Sleep(iter*500);
iter.Dump("Iter");
lock(listt) {
listt.Add(iter.ToString());
}
});
listt.Dump();
}
// Define other methods and classes here