高端大气的网站首页,城阳网站建设公司电话,成都最专业做网站的,策划书怎么写 格式范文完成计算异常
现在我们来看一下异步操作如何显式地返回异常#xff0c;用来指示计算失败。我们简化这个例子#xff0c;操作处理一个字符串#xff0c;把它转换成答谢#xff0c;我们模拟延迟一秒。
我们使用thenApplyAsync(Function, Executor)方法#xff0c;第一个参…完成计算异常
现在我们来看一下异步操作如何显式地返回异常用来指示计算失败。我们简化这个例子操作处理一个字符串把它转换成答谢我们模拟延迟一秒。
我们使用thenApplyAsync(Function, Executor)方法第一个参数传入大写函数 executor是一个delayed executor,在执行前会延迟一秒。
static void completeExceptionallyExample() {CompletableFuture cf CompletableFuture.completedFuture(message).thenApplyAsync(String::toUpperCase,CompletableFuture.delayedExecutor(1, TimeUnit.SECONDS));CompletableFuture exceptionHandler cf.handle((s, th) - { return (th ! null) ? message upon cancel : ; });cf.completeExceptionally(new RuntimeException(completed exceptionally));assertTrue(Was not completed exceptionally, cf.isCompletedExceptionally());try {cf.join();fail(Should have thrown an exception);} catch(CompletionException ex) { // just for testingassertEquals(completed exceptionally, ex.getCause().getMessage());}assertEquals(message upon cancel, exceptionHandler.join());
}
让我们看一下细节。
首先我们创建了一个CompletableFuture, 完成后返回一个字符串message,接着我们调用thenApplyAsync方法它返回一个CompletableFuture。这个方法在第一个函数完成后异步地应用转大写字母函数。
这个例子还演示了如何通过delayedExecutor(timeout, timeUnit)延迟执行一个异步任务。
我们创建了一个分离的handler阶段exceptionHandler 它处理异常异常在异常情况下返回message upon cancel。
下一步我们显式地用异常完成第二个阶段。在阶段上调用join方法它会执行大写转换然后抛出CompletionException正常的join会等待1秒然后得到大写的字符串。不过我们的例子还没等它执行就完成了异常 然后它触发了handler阶段。