我不了解AsyncResult类的想法。 从tutorial我了解到它的工作方式与FutureTask类相同(但AsyncResult是可序列化的,因此可以发送到本地或远程客户端)。 但是,doc表示不应该调用此类的方法,因此我只能创建并返回此类的实例:
@Asynchronous
public Future<String> processPayment(Order order) throws PaymentException {
...
String status = ...;
return new AsyncResult<String>(status);
}
那么客户会获得什么样的对象?
我可以写
吗?@Asynchronous
public AsyncResult<String> processPayment...
?
在调用AsyncResult的/ Future的cancel(false)
方法之后容器会做什么来取消异步任务吗?
修改 我在thread找到了答案。
答案 0 :(得分:0)
您可以在AsyncResult类文档中找到基本原理:
请注意,此对象不会传递给客户端。它只是一个 为容器提供结果值的便利性。 因此,它的实例方法都不应该被调用 应用
使用第一个代码段中定义的(正确)签名,客户端将收到一个简单的Future,如下所示:
@Singleton
public class AsyncClient{
@Inject PaymentProcessor proc;
public String invokePaymentProcessor(Order order){
Future<String> result=proc.processPayment(order);
// should not block.... the container instantiates a Future and
// returns it immediately
return result.get(); // gets the string (blocks until received)
}
}
当然,如果容器尚未开始方法调用(即异步调用仍在processig队列中),cancel(false)
应取消调用(将其从队列中删除),否则应指定{{ 1}}并在cancel(true)
SessionContext.wasCancelled