code: public static Result onUiAsync(Action action) {
          if (Looper.myLooper() == Looper.getMainLooper()) {
              action.call();
              return new ActionAsyncTask(action, true);
          }
          ActionAsyncTask task = new ActionAsyncTask(action);
          getUiPoster().async(task);
          return task;
      }
docs: Asynchronously
  The current thread asynchronous run relative to the main thread,
  not blocking the current thread
  
  @param action Action Interface