Да, в строке await
методы GetCustomers1
и GetCustomers2
немедленно возвратят незавершенную задачу, предполагая, что задачи, возвращенные из getcustomer1Async()
и getcustomers2Async()
, являются незавершенными. Ключевое слово await
позволяет писать код под строкой await
, которая будет запускаться после завершения ожидаемой задачи. В вашем случае нет кода ниже строки await, так что вы также можете напрямую возвращать задачи, не ожидая их:
public Task<string> GetCustomers1()
{
return getcustomer1Async();
}
Обратите внимание, что пропало не только ключевое слово await
, но и async
.
Что касается метода Index
, он должен дать вам предупреждение во время компиляции за отсутствие await
внутри метода, помеченного ключевым словом async
. Вам, вероятно, следует изменить его на что-то вроде этого:
public async Task<JsonResult> Index()
{
var task1 = Task.Run(() => GetCustomers1());
var task2 = Task.Run(() => GetCustomers2());
string[] results = await Task.WhenAll(task1, task2);
//...use the results to create a JsonResult and return it
}
Наконец, имейте в виду, что обычной практикой является добавление суффикса Async
к методам, которые возвращают Task
. Таким образом, метод GetCustomers1
должен быть переименован в GetCustomers1Async
, Index
должен быть переименован в IndexAsync
et c. Вы можете прочитать соответствующие рекомендации здесь .