Page 1 of 1

Asparallel.forall mit asynchronisiertem Code wartet nicht auf Fertigstellung [Duplikat]

Posted: 22 May 2025, 11:11
by Anonymous
Ich habe einen Code, der Asparallel (). Forall (...) verwendet, von dem ich glaubte, dass er blockieren würde, während alle Ausführungen abgeschlossen sind. Dies funktioniert perfekt mit dem nicht asynchronen Code.

Code: Select all

static void Main(string[] args)
{
var arr = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };

void printNumber(int numb)
{
Thread.Sleep(1000);
Console.WriteLine("Number: " + numb);
}

arr.AsParallel().ForAll(p =>
{
printNumber(p);
});

Console.WriteLine("Done!");
Console.ReadLine();
}
führt zu einer Ausgabe von:

Code: Select all

static void Main(string[] args)
{
var arr = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };

async Task printNumber(int numb)
{
await Task.Delay(1000);
Console.WriteLine("Number: " + numb);
}

arr.AsParallel().ForAll(async p =>
{
await printNumber(p);
});

Console.WriteLine("Done!");
Console.ReadLine();
}
Die ForAll -Zeile blockiert nicht, und Sie können das in der Ausgabe sehen: