var task = db.Image.CountAsync();
var result = task.Result;
var result2 = task.Result;
var result3 = task.Result;
db.Image.CountAsync();
возвращает задачу.Task.Wait(db.Image.CountAsync())
и Task.WaitAll(db.Image.CountAsync())
var task = db.Image.CountAsync();
Task.Wait(task);
var result = task.Result; // тут уже нет никаких запросов и выполнений, мы дождались результатов на первой строчке.
var task = db.Image.CountAsync();
var task2 = db.Image.ToArrayAsync();
Task.WaitAll(task, task2); // Это и есть ожидание всех результатов
var result = task.Result;
var result2 = task2.Result;