gpt4 book ai didi

java - AsyncListener#onError 的用法

转载 作者:搜寻专家 更新时间:2023-10-30 20:53:15 25 4
gpt4 key购买 nike

我不明白什么时候调用 AsyncListener#onError 方法。Javadoc 没有帮助:

Notifies this AsyncListener that an asynchronous operation has failed to complete.

怎么会失败呢?如何重现此错误?

更新:

// in HttpServlet doGet method
AsyncContext asyncContext = req.startAsync();
asyncContext.addListener(new AsyncListener() {
// some code
@Override
public void onError(AsyncEvent event) {
// when is it called?
}
});
executeInSomeOtherThread(asyncContext);

我需要在其他线程中做什么才能使此异步操作失败?

最佳答案

如果在执行异步操作时抛出异常,将调用 onError。

它们通常是扩展 java.io.IOException 的 Throwables,这些异常是由于不可靠的连接导致的 I/O 故障或由于客户端和服务器之间的不匹配而导致的逻辑错误导致的协议(protocol)级异常。

你可以在调用 onError 时获取 Throwable,方法是调用:

event.getThrowable();

编辑以解决 mjaggard 的后续问题

暂时忘记 AsyncContext,考虑以下类:

public class MyRunnableClass implements Runnable {
private Listener mListener;

interface Listener {
void onError(Throwable error);
}

public void setListener(Listener listener) {
mListener = listener;
}

@Override
public void run() {
// Some important code to be executed goes here

// Pretend an exception was caught in a try/catch/finally
// block that was doing an I/O operation

Throwable someError = new IOException();

if (mListener != null) {
mListener.onError(someError);
}
}
}

现在是否更清楚了如何调用监听器的 onError 方法,因为在调用 MyRunnableClass 的 run 方法时引发了异常?

MyRunnableClass mrc = new MyRunnableClass();
mrc.setListener(new Listener() {
@Override
public void onError(Throwable error) {

}
});

Executors.newSingleThreadScheduledExecutor().schedule(mrc, 1000L, TimeUnit.MILLISECONDS);

这与 AsyncContext 如何保持监听器并在它遇到它希望向监听器报告的异常时通知它没有什么不同。 run 方法如何被调用实际上是次要的,因为正在执行的代码的所有者也是持有对监听器的引用的人。

关于java - AsyncListener#onError 的用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21859598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com