我有一个像这样的异步处理程序方法
@RequestMapping("/custom-timeout-handling")
public @ResponseBody WebAsyncTask<String> callableWithCustomTimeoutHandling() {
Callable<String> callable = new Callable<String>() {
public String call() throws Exception {
while(i==0){
System.out.println("inside while loop->");
}
return "Callable result";
}
};
return new WebAsyncTask<String>(10000, callable);
}
这将执行while循环,直到指定的超时(10秒)。
当请求超时时,从 TimeoutCallableProcessingInterceptor 执行 handleTimeout 方法
public class TimeoutCallableProcessingInterceptor extends CallableProcessingInterceptorAdapter {
@Override
public <T> Object handleTimeout(NativeWebRequest request, Callable<T> task) throws Exception {
throw new IllegalStateException("[" + task.getClass().getName() + "] timed out");
}
}
来源:我已经换了
Thread.sleep(2000)
和
while(i==0){
System.out.println("inside while loop->");
}
我的问题是即使在超时(完成执行句柄超时方法)响应从句柄超时方法发送后,while 循环仍在处理,直到 i 的值更改为除零以外的其他值。
请求是否仍然被服务器持有?那么请求超时有什么用?
提前致谢...