有一个功能是上传文件的时候保存业务数据,保存失败删除上传的文件,修改图片可以删除之前上传的图片,考虑在后台使用异步处理,网上搜了一下可以用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;
}
});