LorryLu0416 2021-05-19 10:02 采纳率: 70%
浏览 173
已采纳

急!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条回答 默认 最新

  • 大太子二太子 2021-05-19 17:21
    关注

    TimeUnit.SECONDS.sleep(1000); 这个是睡了一千秒吧,把1000改成1试试

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加
  • ¥15 用ns3仿真出5G核心网网元
  • ¥15 matlab答疑 关于海上风电的爬坡事件检测