Parallelly resizing mutiple photos
public void Resize(string filePath, string dropLocation, List&lt;Size&gt; sizes)



Why List&lt;&gt;? Following the principle of coding to the interface rather than the implementation, this should probably be IList&lt;&gt; or even IReadOnlyList&lt;&gt;.




        Parallel.ForEach(sizes, async (size) =&gt;
        {
            var fileName = Path.GetFileName(filePath);
            var result = await Resize(filePath, dropLocation, size);
            Console.WriteLine($"Done {result} Resizing {fileName} to {size}");
        });



Why async/await inside Parallel.ForEach? If each size is handled on a different thread, there's nothing to be gained by using await.




            var newFilePath = $"{dropLocation}{newFileName}";



Path.Combine exists for a reason: using that rather than manual concatenation will give more robust code.




            await Task.Run(() =&gt;
            {
                image.Resize(magickSize);
                image.Write(newFilePath);
            });



Pretend for a moment that we're not using Parallel.ForEach. The benefit of async/await with something like image processing is that you can keep the CPU busy even when one of the coroutines is blocked on I/O. But half of the I/O has already happened (maybe more if you're always scaling down rather than up). If you want to make an async version, the image load should be async.