If execute() throws a RejectedExecutionException, the operation will hang.  Even though some thread pool types are guaranteed not to do this, it's still more resilient to perform the context.asynchronous() only after we know the submission was successful.