Rozważmy następujący przykładowy kod, który tworzy enumerable zbiór liczb całkowitych i przetwarza je równolegle:bezpieczeństwo Temat zwrotu plonu z Parallel.ForEach()
using System.Collections.Generic;
using System.Threading.Tasks;
public class Program
{
public static void Main()
{
Parallel.ForEach(CreateItems(100), item => ProcessItem(item));
}
private static IEnumerable<int> CreateItems(int count)
{
for (int i = 0; i < count; i++)
{
yield return i;
}
}
private static void ProcessItem(int item)
{
// Do something
}
}
To jest zagwarantowane, że wątków roboczych generowane przez Parallel.ForEach()
każdy dostanie inny element lub jest jakiś mechanizm blokujący wokół inkrementacji i zwrotu z i
wymagane?
Wystarczy użyć Enumerable.Range tam. –
@newStackExchangeInstance: Myślę, że to tylko próbka iteratora. – Dennis
@newStackExchangeInstance: A w jaki sposób 'Enumerable.Range()' pomaga mi w równoległym przetwarzaniu 'IEnumerable'? –