dzień dobry
proszę o pomoc w zrozumieniu co taki kod robi?

await Task.Run(() => {
 Parallel.ForEach(files, (currentFile) =>
                                {
                                    string filename = Path.GetFileName(currentFile);
                                    var bitmap = new Bitmap(currentFile);
                                    bitmap.RotateFlip(RotateFlipType.Rotate180FlipNone);
                                    bitmap.Save(Path.Combine(newDir, filename));
                                    Console.WriteLine($"Processing {filename} on thread {Thread.CurrentThread.ManagedThreadId}");
                                });
});

Z tego jak ja to rozumiem to

  1. Parallel.ForEach - równolegle przetwarza dane na prockach (corach), po prostu dzieli je na n części i robi robotę. Z tego co wiem to robi to synchronicznie czyli np blokuje watek UI
  2. Task.Run -> wsadza zadanie do kolejki do puli wątków i wykonuje zadanie asynchronicznie

teraz łącząc jedno z drugim - jak rozumiem jest to ni mniej ni więcej przetwarzanie równoległe w osobnym wątku?
Cy dobrze to rozumiem?

dziękuję za odpowiedź