C # System.Threading.Tasks.Parallel.For sur ulong
-
28-09-2019 - |
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);
}
La solution
Vous pouvez toujours écrire à Microsoft et leur demander d'ajouter Parallel.For (ulong, ulong, Action
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);
}