code: public void addEventAsync(final KeenProject project, final String eventCollection,
                                final Map<String, Object> event,
                                final Map<String, Object> keenProperties,
                                final KeenCallback callback) {
          if (!isActive) {
              handleLibraryInactive(callback);
              return;
          }
  
          if (project == null && defaultProject == null) {
              handleFailure(null,
                            project,
                            eventCollection,
                            event,
                            keenProperties,
                            new IllegalStateException(
                                    "No project specified, but no default project found"));
              return;
          }
          final KeenProject useProject = (project == null ? defaultProject : project);
  
          // Wrap the asynchronous execute in a try/catch block in case the executor throws a
          // RejectedExecutionException (or anything else).
          try {
              publishExecutor.execute(new Runnable() {
                  @Override
                  public void run() {
                      addEvent(useProject, eventCollection, event, keenProperties, callback);
                  }
              });
          } catch (Exception e) {
              handleFailure(callback, project, eventCollection, event, keenProperties, e);
          }
      }
docs: Asynchronously adds an event to the specified collection. This method will request that
  the Keen client's {@link java.util.concurrent.Executor} executes the publish operation.
  
  @param project         The project in which to publish the event. If a default project has been set
  on the client this parameter may be null, in which case the default project
  will be used.
  @param eventCollection The name of the collection in which to publish the event.
  @param event           A Map that consists of key/value pairs. Keen naming conventions apply (see
  docs). Nested Maps and lists are acceptable (and encouraged!).
  @param keenProperties  A Map that consists of key/value pairs to override default properties.
  ex: "timestamp" -&gt; Calendar.getInstance()
  @param callback        An optional callback to receive notification of success or failure.