Вы используете ResultSet, когда у вас есть несколько объектов AsyncResult из разных задач , которые вы хотите обрабатывать сразу. С другой стороны, GroupResult - это то, что вы используете вместо AsyncResult, когда выполняете примитив Group и хотите узнать, что происходит с задачами в группе. Вот почему у нее есть связанный ID - потому что Группа будет иметь связанный с ней идентификатор задачи.