Вы, вероятно, ищете await
все ваши задачи * сначала 1003 *, затем группа
// projection to task
var tasks = items.Select(y => AsyncMethod(y);
// Await them all
var results = await Task.WhenAll(tasks)
// group stuff
var groups = results.GroupBy(x => ...);
Полная демонстрация здесь
Примечание : у вас действительно не было тестируемого кода, поэтому я просто подключил что-то подобное
Обновление
причина, по которой ваш пример не работает
items.GroupBy(async _ => (await _.GetRank()))
, заключается в том, что async
лямбда на самом деле просто метод, который возвращает задачу, этопочему вы получаете IGrouping<Task<string>, MyClass>
Вам нужно подождать, пока все ваши задачи завершатся, прежде чем вы сможете подумать о том, чтобы что-то сделать с результатами задачи
Чтобы более подробно объяснить, что происходит, примитевзгляд на этот пример SharpLab
Ваш async
лямбда в основном разрешает это
new Func<int, Task<string>>(<>c__DisplayClass1_.<M>b__0)