Enno Winde
Enno Winde

Reputation: 31

Parallel for each loop does not save all files

I writing on an image converter. When I use parallel for each not all images are saved. Is the processing too fast for writing files on disk?

Here is my code:

private void convert()
{
    Parallel.ForEach(source.GetFiles("*.tif"), 
         new ParallelOptions() { MaxDegreeOfParallelism = Environment.ProcessorCount }, 
         file =>
         {                  
            fileName = file.Name;
            MagickImage image = new MagickImage(sourceFolderPath + "\\" + file);
            image.ColorSpace = ColorSpace.XYZ;
            image.GammaCorrect(2.4);
            image.Write(destinationFolderPath + "\\" + fileName);
         });
}

What did I do wrong?

Upvotes: 3

Views: 596

Answers (1)

Anderson Pimentel
Anderson Pimentel

Reputation: 5777

Try disposing the image:

private void convert()
{
    Parallel.ForEach(source.GetFiles("*.tif"), 
         new ParallelOptions() { MaxDegreeOfParallelism = Environment.ProcessorCount }, 
         file =>
         {                  
            fileName = file.Name;
            using (MagickImage image = new MagickImage(sourceFolderPath + "\\" + file))
            {
                image.ColorSpace = ColorSpace.XYZ;
                image.GammaCorrect(2.4);
                image.Write(destinationFolderPath + "\\" + fileName);
            }
         });
}

Upvotes: 3

Related Questions