Прямо сейчас вы присваиваете response
результату Task.Run
, который также требует, чтобы в некоторых отношениях Task
завершился.Это происходит автоматически при компиляции, потому что вы используете ключевое слово await
.
Если вы предпочитаете, вы можете просто присвоить response
самой запущенной Task
и продолжать работу.Конечно, я бы не назвал это response
больше.Допустим, вы делаете это и называете это task1
.
var task1 = Task.Run(()=>CreateData());
Теперь ваш код продолжит работать, а task1
будет просто представлять запущенный Task
.
Если бы у вас было 5, вы могли бы делать их все так, как вам нравится.
var task1 = Task.Run(()=>CreateData());
var task2 = Task.Run(()=>CreateData());
var task3 = Task.Run(()=>CreateData());
var task4 = Task.Run(()=>CreateData());
var task5 = Task.Run(()=>CreateData());
Теперь вы также можете ждать одновременного завершения всех этих задач с помощью * 1021.* method.
await Task.WhenAll(task1, task2, task3, task4, task5);
Итак, чтобы подвести итог.
Ключевое слово await
делает некоторую магию компилятора и в основном помещает обратный вызов в это место метода (присваиваяостальная часть метода является продолжением, когда Task
завершено), а ТАКЖЕ присваивает Result
этой Task
переменной (если Task
имеет результат).Здесь есть что распаковать;Я не верю, что короткий ответ действительно оправдывает происходящее.
Без использования ключевого слова await
вы просто присваиваете самой переменной Task
.