code: private Observable<Indexable> invokeReadyTasksAsync(final InvocationContext context) {
          TaskGroupEntry<TaskItem> readyTaskEntry = super.getNext();
          final List<Observable<Indexable>> observables = new ArrayList<>();
          // Enumerate the ready tasks (those with dependencies resolved) and kickoff them concurrently
          //
          while (readyTaskEntry != null) {
              final TaskGroupEntry<TaskItem> currentEntry = readyTaskEntry;
              final TaskItem currentTaskItem = currentEntry.data();
              if (currentTaskItem instanceof ProxyTaskItem) {
                  observables.add(invokeAfterPostRunAsync(currentEntry, context));
              } else {
                  observables.add(invokeTaskAsync(currentEntry, context));
              }
              readyTaskEntry = super.getNext();
          }
          return Observable.mergeDelayError(observables);
      }
docs: Invokes the ready tasks.
  
  @param context group level shared context that need be passed to
  {@link TaskGroupEntry#invokeTaskAsync(boolean, InvocationContext)}
  method of each entry in the group when it is selected for execution
  
  @return an observable that emits the result of tasks in the order they finishes.