等待接口的异步实现

时间:2017-03-21 20:34:44

标签: java asynchronous

目前我必须使用服务接口。界面提供了以下方法:

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。但我不能正确地转移到我的情况。有人能帮助我吗?或者也许我必须使用不同的东西?

我很乐意为你提供帮助。

非常感谢!

1 个答案:

答案 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.
      }
}