LorryLu0416
2021-05-19 10:02
采纳率: 77.8%
浏览 148

急!java8 CompletableFuture异步处理handle方法

有一个功能是上传文件的时候保存业务数据,保存失败删除上传的文件,修改图片可以删除之前上传的图片,考虑在后台使用异步处理,网上搜了一下可以用CompletableFuture去实现,但是现在使用CompletableFuture处理发现无法跳转到handle方法里面的断点导致无法删除已上传的文件,不知道是哪里逻辑写的不对,之前没有用过这种方式去处理异步调用,请各位大佬帮忙看看是哪里有问题?

!!!!!疑问点:

代码段:(保存业务数据逻辑只是保存数据没有返回值所以用的是runAsync没有用supplyAsync)

CompletableFuture<Void> saveFuture = CompletableFuture.runAsync(() -> {

	try {
		System.out.println("-----------业务数据保存开始Start-----------");
		//业务数据保存逻辑
		System.out.println("-----------业务数据保存结束End-----------");
		TimeUnit.SECONDS.sleep(1000);
	} catch (RuntimeException e) {
		e.printStackTrace();
	} catch (InterruptedException e) {
		e.printStackTrace();
	}

}, Executors.newSingleThreadExecutor())
.handle(new BiFunction<Void, Throwable, Void>() {
	@Override
	public Void apply(Void unused, Throwable throwable) {
		if (throwable != null) {
			System.out.println("-----------业务数据保存失败Fail-----------");
			System.out.println("-----------保存业务数据发生异常,删除上已传的文件-----------");
			//删除文件逻辑
			
		} else {
			//保存业务数据成功,删除旧文件
			System.out.println("-----------业务数据保存成功Success-----------");
			System.out.println("-----------保存业务数据成功,删除旧文件-----------");
			//删除文件逻辑
		}
		return null;
	}
});
  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

1条回答 默认 最新

相关推荐 更多相似问题