docs: private Observable<Indexable> invokeTaskAsync(final TaskGroupEntry<TaskItem> entry, final InvocationContext context) {
          return Observable.defer(new Func0<Observable<Indexable>>() {
              @Override
              public Observable<Indexable> call() {
                  if (isGroupCancelled.get()) {
                      // One or more tasks are in faulted state, though this task MAYBE invoked if it does not
                      // have faulted tasks as transitive dependencies, we won't do it since group is cancelled
                      // due to termination strategy TERMINATE_ON_IN_PROGRESS_TASKS_COMPLETION.
                      //
                      return processFaultedTaskAsync(entry, taskCancelledException, context);
                  } else {
                      // Any cached result will be ignored for root resource
                      //
                      boolean ignoreCachedResult = isRootEntry(entry) || (entry.proxy() != null && isRootEntry(entry.proxy()));
  
                      Observable<Indexable> taskObservable = entry.invokeTaskAsync(ignoreCachedResult, context);
                      Func1<Indexable, Observable<Indexable>> onResult = new Func1<Indexable, Observable<Indexable>>() {
                          @Override
                          public Observable<Indexable> call(final Indexable taskResult) {
                              return Observable.just(taskResult);
                          }
                      };
                      Func1<Throwable, Observable<Indexable>> onError = new Func1<Throwable, Observable<Indexable>>() {
                          @Override
                          public Observable<Indexable> call(final Throwable taskError) {
                              return processFaultedTaskAsync(entry, taskError, context);
                          }
                      };
                      Func0<Observable<Indexable>> onComplete = new Func0<Observable<Indexable>>() {
                          @Override
                          public Observable<Indexable> call() {
                              return processCompletedTaskAsync(entry, context);
                          }
                      };
                      return taskObservable.flatMap(onResult, onError, onComplete);
                  }
              }
          });
      }