Existe-t-il un moyen d'obtenir le Parallel.For
version de ce for
boucle ?
for (int i = 0; i < 100; i += 2) { DoStuff(i); }
Je ne vois pas de surcharge qui accepte un paramètre d'étape, mais je ne vois pas pourquoi cela serait logiquement impossible.
La réponse acceptée à ce y ce La question suggère d'utiliser Parallel.ForEach
sur une série de int
générés à l'aide de Enumerable.Range
mais dans mon cas, j'utilise les données locales du fil. donc .Parallel.ForEach
n'est pas une option
Une autre option consiste à vérifier si i % 2 == 0
dans le corps de ma boucle et return
mais cela exécute toujours l'initialisateur de données locales du fil. Func
et finaliseur Func
. Vous trouverez ci-dessous un extrait de code illustrant cette option :
Parallel.For<Bar>(0, limit,
() => new Bar(), //thread local data initialize
(i, state, local) => //loop body
{
if (i % 2 != 0) return local;
local.foo += DoStuff(i);
return local;
},
(local) => //thread local data post-action
{
lock (loopLocker)
{
globalData.foo += local.foo;
);
}
);