Protect against unsafe user implementations so crashes are properly reported (logs, onThrowable, future).