1070 |
|
* the task. |
1071 |
|
* |
1072 |
|
* 4. Assuming beforeExecute completes normally, we run the task, |
1073 |
< |
* gathering any of its thrown exceptions to send to |
1074 |
< |
* afterExecute. We separately handle RuntimeException, Error |
1075 |
< |
* (both of which the specs guarantee that we trap) and arbitrary |
1076 |
< |
* Throwables. Because we cannot rethrow Throwables within |
1077 |
< |
* Runnable.run, we wrap them within Errors on the way out (to the |
1078 |
< |
* thread's UncaughtExceptionHandler). Any thrown exception also |
1073 |
> |
* gathering any of its thrown exceptions to send to afterExecute. |
1074 |
> |
* We separately handle RuntimeException, Error (both of which the |
1075 |
> |
* specs guarantee that we trap) and arbitrary Throwables. |
1076 |
> |
* Because we cannot rethrow Throwables within Runnable.run, we |
1077 |
> |
* wrap them within Errors on the way out (to the thread's |
1078 |
> |
* UncaughtExceptionHandler). Any thrown exception also |
1079 |
|
* conservatively causes thread to die. |
1080 |
|
* |
1081 |
|
* 5. After task.run completes, we call afterExecute, which may |