Since you are trying to save the results of all your calls to GetDataAsync, which are tasks, you should not expect them. Just delete await, collect all the tasks and wait for them at the end.
static void Run()
{
List<string> IDs = new List<string>() { "a", "b", "c", "d", "e", "f" };
Task[] tasks = new Task[IDs.Count];
for (int i = 0; i < IDs.Count; i++)
tasks[i] = GetDataAsync(IDs[i]);
Task.WaitAll(tasks);
}
, Run async ( async void, UI), Task.WaitAll.
, Run async void ( UI) Task.WhenAll(tasks) :
static async void Run()
{
await Task.WhenAll(new[] {"a", "b", "c", "d", "e", "f"}.Select(GetDataAsync));
}