code: public Observable<Indexable> invokeAsync(final InvocationContext context) {
          return Observable.defer(new Func0<Observable<Indexable>>() {
              @Override
              public Observable<Indexable> call() {
                  if (proxyTaskGroupWrapper.isActive()) {
                      return proxyTaskGroupWrapper.taskGroup()
                              .invokeInternAsync(context, true, null);
                  } else {
                      Set<String> processedKeys = runBeforeGroupInvoke(null);
                      if (proxyTaskGroupWrapper.isActive()) {
                          // If proxy got activated after 'runBeforeGroupInvoke()' stage due to the addition of direct
                          // 'postRunDependent's then delegate group invocation to proxy group.
                          //
                          return proxyTaskGroupWrapper.taskGroup()
                                  .invokeInternAsync(context, true, processedKeys);
                      } else {
                          return invokeInternAsync(context, false, null);
                      }
                  }
              }
          });
      }
docs: Invokes tasks in the group.
  
  @param context group level shared context that need be passed to invokeAsync(cxt)
  method of each task item in the group when it is selected for invocation.
  
  @return an observable that emits the result of tasks in the order they finishes.