Frage

Ich bin an der TPL Ausnahme der Suche Beispiel von MSDN Handhabung @

http://msdn.microsoft. com / en-us / library / dd537614 (v = VS.100) aspx

Die Grundform des Codes ist:

Task task1 = Task.Factory.StartNew(() => { throw new IndexOutOfRangeException(); });
try
{
   task1.Wait();
}
catch (AggregateException ae)
{
   throw ae.Flatten();
}

Meine Frage ist: Ist das eine Race-Bedingung? Was passiert, wenn task1 wirft, bevor der Versuch ausgeführt hat? Bin ich etwas fehlt, das stoppt dies ein Rennen zu sein?

Sollte es nicht wie diese Stelle geschrieben werden:

try
{
   Task task1 = Task.Factory.StartNew(() => { throw new IndexOutOfRangeException(); });
   task1.Wait();
}
catch (AggregateException ae)
{
   throw ae.Flatten();
}
War es hilfreich?

Lösung

Nein, das erste Beispiel ist vollkommen gültig.

Wenn die Ausnahme in der Task angehoben wird, wird es in einem Aggregate gewickelt. Erst wenn ein anderer Thread die Aufgabe verbindet, in diesem Beispiel durch task1.Wait () aufrufen, ist die Ausnahme von der Verbindungsfaden propogated. Im Wesentlichen wird die Ausnahme ‚gespeichert‘, bis es wieder zu einem Faden propogated werden kann, die für die Rückmeldung warten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top