Parallele Programmierung mit PLINQ und .NET 4.0

    

» Von Peter Monadiemi, 09.03.2010 15:12.

Da die Schnittstelle ParallelEnumerable alle LINQ-Erweiterungsmethoden implementiert, ist keine weitere Anpassung erforderlich und eine bislang sequentiell ausgeführte LINQ-Abfrage wird parallel ausgeführt. Auch wenn das Beispiel in Listing 1 anschaulich demonstriert, dass der Umgang mit PLINQ sehr einfach sein kann, müssen einige Punkte besonders beachtet werden.

Fehlerbehandlung mit AggregateException

Die gleichzeitige Ausführung von Programmcode bedeutet auch, dass zeitgleich mehrere Fehler auftreten können. Um diese behandeln zu können, werden alle Fehler von der Ausführungsumgebung gesammelt und einer AggregateException hinzugefügt, die entsprechend behandelt werden muss. Listing 2 zeigt, wie im Rahmen einer Fehlerbehandlung auf alle über diese Ausnahme zur Verfügung gestellten aufgetretenen Fehler zugegriffen wird. Bevor mit der Fehlerbehandlung begonnen werden kann, wird die Methode Flatten aufgerufen. Sie extrahiert unter anderem verschachtelte Fehler, da eine AggregateExcetion selbst wieder AggregateExceptions enthalten könnte. Die Methode Handle wird für jede enthaltene Exception aufgerufen. Kann die Exception behandelt werden, gibt die eigene Fehlerbehandlungsroutine true zurück, ansonsten false. Nicht behandelbare Fehler werden erneut ausgelöst und müssen weiter oben im Aufrufstapel behandelt werden.

Listing 2: Fehlerbehandlung bei einer parallelen Abfrage
static void ExceptionHandling()
{
try
{
var result = Enumerable.Range(1, 200).ToArray().AsParallel()
.Select(i => {
if (i > 51)
throw new Exception("Unknown Error");
if (i > 50)
throw new IndexOutOfRangeException("Zahl ist zu hoch: " + i);
return i;
}).ToArray();
}
catch (AggregateException age)
{
age.Flatten().Handle(exc =>
{
if (exc is IndexOutOfRangeException)
{
Console.WriteLine(exc.Message);
return true;
}
return false;
});
}
}

Werbung

KOMMENTARE

Keine Kommentare

KOMMENTAR SCHREIBEN

*
*
*
*

Alles Pflichfelder, E-Mail-Adresse wird nicht angezeigt.

Die Redaktion hält sich vor, unangebrachte, rassistische oder ehrverletzende Kommentare zu löschen.
Die Verfasser von Leserkommentaren gewähren der IDG Communications AG das unentgeltliche, zeitlich und räumlich unbegrenzte Recht, ihre Leserkommentare ganz oder teilweise auf dem Portal zu verwenden. Eingeschlossen ist zusätzlich das Recht, die Texte in andere Publikationsorgane, Medien oder Bücher zu übernehmen und zur Archivierung abzuspeichern.