目前我必须使用服务接口。界面提供了以下方法:
public interface SomeServiceInterface{
// true - if the implementation of the interface is an asynchronous call,
// false - if synchronous
boolean isAsynchronous();
// a method, that can be implemented synchronously and asynchrounously
// it returns some response object
ResponseObject someMethod();
}
一个简单的对象:
public class ResponseObject{
private String foo;
private int bar;
}
该界面的实现对我来说是隐藏的,我无法触及它。现在,我的班级中有一个方法,即获取类型SomeServiceInterface
的列表。我想等同于异步操作的异步服务操作。
我需要类似的东西:
public oneOfMyImplementedMethod(){
// Getting a reference
List<SomeServiceInterface> serviceList = ...
for(SomeServiceInterface service: serviceList){
ResponseObject responseObject = null;
if(service.isAsynchronous()){
// !!! Here i want to wait until the asynchronous operation is finished, instead to continue
responseObject = responseObject.someMethod();
}
else{
responseObject = service.someMethod();
}
//... do something with the responseObject
}
}
我怎样才能做到这一点?我是这个异步主题的新手,我看到有些人正在使用CountDownLatch。但我不能正确地转移到我的情况。有人能帮助我吗?或者也许我必须使用不同的东西?
我很乐意为你提供帮助。
非常感谢!
答案 0 :(得分:1)
您不能等到异步方法返回,因为它的性质。它完成了幕后的所有工作。为了知道工作何时完成,您需要一个回调方法。您可以注册将在作业完成时触发的事件处理程序。
public interface SomeServiceInterface{
boolean isAsynchronous();
ResponseObject someMethod();
void addEventHandler(MyProcessEventHandler h);
}
你的事件处理程序可能是这样的。
public class MyProcessEventHandler{
public void onEvent(ProcessResult result){//Process result could be a class that holds the result of the process.
//Do the work here. Here you process the result of the process call.
}
}