Warum wird der folgende Code sequentiell ausgeführt?
List tasks = new List();
for (int i = 0; i <= max; i += block)
{
if (i + block >= max)
tasks.Add(Task.Factory.StartNew(() => Count(ref counter, block)));
else
block = max - i;
}
Task.WaitAll(tasks.ToArray());
Ich habe auch eine Version davon mit Parallel.Invoke
getestet; auch diese wird nicht parallel ausgeführt. Es muss etwas geben, das ich nicht verstehe, aber wenn ich danach google, erhalte ich hauptsächlich Anleitungen, wie man sequentielle Ausführung erzwingt.
Als Antwort auf eine der Vorbehalte in einer untenstehenden Antwort, habe ich die folgende Methode zur Referenz hinzugefügt:
static void Count(ref int counter, int num)
{
int localCounter = 0;
for (int i = 0; i < num; i++)
if (Coin()) localCounter++;
System.Threading.Interlocked.Add(ref counter, localCounter);
}
Erneut bearbeitet: Vielen Dank an alle!