Код: Выделить всё
var rand = new Random(1);
var range = Enumerable.Range(1, 8);
var partition = Partitioner.Create(range, EnumerablePartitionerOptions.NoBuffering);
foreach (var x in partition
.AsParallel()
.AsOrdered()
.WithMergeOptions(ParallelMergeOptions.NotBuffered)
.WithDegreeOfParallelism(4)
.Select(DoSomething))
{
Console.WriteLine($"---- {x} {DateTime.Now.TimeOfDay} " +
$"{Thread.CurrentThread.ManagedThreadId}");
}
int DoSomething(int x)
{
Console.WriteLine($"WAIT {x} {DateTime.Now.TimeOfDay} " +
$"{Thread.CurrentThread.ManagedThreadId}");
int random;
lock (rand) { random = rand.Next(2000); }
Thread.Sleep(random); //fake work being done
Console.WriteLine($"DONE {x} {DateTime.Now.TimeOfDay} " +
$"{Thread.CurrentThread.ManagedThreadId}");
return x;
}
Код: Выделить всё
WAIT 2 13:51:08.8398170 10
WAIT 1 13:51:08.8398197 9
WAIT 3 13:51:08.8398132 11
WAIT 4 13:51:08.8398108 4
DONE 1 13:51:09.0805471 9
Подробнее здесь: [url]https://stackoverflow.com/questions/79825526/why-are-items-not-written-to-console-immediately-after-being-processed[/url]