MSDN Beispiel für eine Ausnahme von der TPL Handhabung - Ist dies eine Race-Bedingung?
-
27-09-2019 - |
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();
}
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.