With parallel algorithms knocking at the door, it might be a good time to think about error handling.
So at first there were error codes. Those sucked. It was free to ignore them, so you could fail late and produce hard-to-debug code.
Then came exceptions. Those were made impossible to ignore once they occur, and most people (except Joel) like them better.
And now we got libraries that help parallel code. Problem is, you can't handle exceptions in parallel code as easily as you could with non-parallel code. If you asynchronously launch a task and it throws an exception, there's no stack trace past it to unwind; best you can do is capture it and register it on the task object, if there's such an object. However, it defeats the primary strength of exceptions: you have to check for them and you can ignore them without any additional effort, whereas in single-threaded code an exception will necessarily trigger the appropriate actions (even if it means terminating your program).
How should language implementations or libraries support errors in parallel code?