假设我们有一个弹簧托控制器,可以进行长时间的操作:
@PostMapping(path = "someLongOperation")
public ResponseEntity<?> doOp(@RequestBody MyBody) {
...do A
...do B //client cancels request while execution is at this step
...do some calculations
...save result to database
return ResponseEntity.ok("my response body")
}
然后,在步骤B,客户端取消请求。在Postman上按“取消”,在浏览器上关闭网页,我们的方法是否仍将继续执行并将结果写入数据库?
在这方面异步方法是否有所不同?
@PostMapping(path = "someLongOperation")
public Callable<ResponseEntity<?>> doOp(@RequestBody MyBody) {
return () -> {
...do A
...do B //client cancels request while execution is at this step
...do some calculations
...save result to database
return ResponseEntity.ok("my response body")
}
}