Question

C #, theres un System.Threading.Tasks.Parallel.For (...) wich fait la même chose que pour une boucle, sans ordre, mais dans plusieurs threads. La chose est, il ne fonctionne que sur les long et int, je veux travailler avec ulong. D'accord, je peux cataloguée mais j'ai des problèmes avec les frontières. Regardons les choses en dire, je veux une boucle de long.MaxValue-10 à long.MaxValue + 10 (rappelez-vous, je parle ulong) ... Comment puis-je faire? (Je dois admettre, je me sens maintenant un peu à droite stupide, mais je ne peux pas le comprendre en ce moment)

Exemple Un:

for (long i = long.MaxValue - 10; i < long.MaxValue; ++i)
{
    Console.WriteLine(i);
}
//does the same as
System.Threading.Tasks.Parallel.For(long.MaxValue - 10, long.MaxValue, delegate(long i)
{
    Console.WriteLine(i);
});
//except for the order, but theres no equivalent for
long max = long.MaxValue;
for (ulong i = (ulong)max - 10; i < (ulong)max + 10; ++i)
{
    Console.WriteLine(i);
}
Était-ce utile?

La solution

Vous pouvez toujours écrire à Microsoft et leur demander d'ajouter Parallel.For (ulong, ulong, Action ) à la prochaine version du .NET Framework. Jusqu'à ce sort, vous devrez recourir à quelque chose comme ceci:

Parallel.For(-10L, 10L, x => { var index = long.MaxValue + (ulong) x; });

Autres conseils

Ou vous pouvez créer une gamme personnalisée pour Parallel.ForEach

public static IEnumerable<ulong> Range(ulong fromInclusive, ulong toExclusive)
{
  for (var i = fromInclusive; i < toExclusive; i++) yield return i;
}

public static void ParallelFor(ulong fromInclusive, ulong toExclusive, Action<ulong> body)
{
  Parallel.ForEach(
     Range(fromInclusive, toExclusive),
     new ParallelOptions { MaxDegreeOfParallelism = 4 },
     body);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top