`throw`ing here doesn't cause `onException` to handle it? Or is this an optimization?