code: public void callback(final Callback callback)
      {
          Runnable runnable = new Runnable()
          {
              @Override
              public void run()
              {
                  try
                  {
                      callback.result(queryId, awaitResult());
                  }
                  catch (Exception e)
                  {
                      callback.error(queryId, e);
                  }
              }
          };
          EXECUTOR_SERVICE.submit(runnable);
      }
docs: This method returns immediately and polls asynchronously for the result.
  When the result is retrieved (or there is an error) the callback is called
  
  @param callback callback