У меня есть метод, который возвращает IEnumerable
, который, конечно, обрабатывается с помощью yield return < строка>;
. Я хочу, чтобы результат этого обрабатывался несколькими потоками, разумеется, без его повторения и обеспечения потоковой безопасности. Как мне этого добиться?
var result = GetFiles(source);
for (int i = 0; i < Environment.ProcessorCount; i++)
{
tasks.Add(Task.Factory.StartNew(() => { ProcessCopy(result); }));
}
Task.WaitAll(tasks.ToArray());
Однако, похоже, это дает повторы:
C:\Users\esac\Pictures\2000-06\DSC_1834.JPG
C:\Users\esac\Pictures\2000-06\DSC_1835.JPG
C:\Users\esac\Pictures\2000-06\.picasa.ini
C:\Users\esac\Pictures\2000-06\DSC_1834.JPG
C:\Users\esac\Pictures\2000-06\DSC_1835.JPG
C:\Users\esac\Pictures\2000-06\.picasa.ini
C:\Users\esac\Pictures\2000-06\DSC_1834.JPG
C:\Users\esac\Pictures\2000-06\DSC_1835.JPG
C:\Users\esac\Pictures\2000-06\.picasa.ini
C:\Users\esac\Pictures\2000-06\DSC_1834.JPG
C:\Users\esac\Pictures\2000-06\DSC_1835.JPG