Wenn parallele Algorithmen an die Tür klopfen, ist es möglicherweise ein guter Zeitpunkt, über die Fehlerbehandlung nachzudenken.
Zuerst gab es also Fehlercodes. Die saugten. Es war kostenlos, sie zu ignorieren, sodass Sie spät ausfallen und schwer zu debuggenden Code erstellen konnten.
Dann kamen Ausnahmen. Es wurde unmöglich gemacht, diese zu ignorieren, sobald sie auftreten, und die meisten Menschen (außer Joel) mögen sie besser.
Und jetzt haben wir Bibliotheken, die parallelen Code unterstützen. Das Problem ist, dass Sie Ausnahmen im parallelen Code nicht so einfach behandeln können wie im nicht parallelen Code. Wenn Sie eine Aufgabe asynchron starten und sie eine Ausnahme auslöst, gibt es keine Stapelverfolgung, an der Sie sich abwickeln können. Das Beste, was Sie tun können, ist, es zu erfassen und im Aufgabenobjekt zu registrieren, wenn es ein solches Objekt gibt. Die primäre Stärke von Ausnahmen wird jedoch zunichte gemacht: Sie müssen nach ihnen suchen und können sie ohne zusätzlichen Aufwand ignorieren , während eine Ausnahme im Single-Thread-Code notwendigerweise die entsprechenden Aktionen auslöst (selbst wenn dies das Beenden Ihres Programms bedeutet).
Wie sollten Sprachimplementierungen oder Bibliotheken Fehler im parallelen Code unterstützen?