asyncметоди відрізняються від звичайних. Що б ви не повернулися з asyncметодів, загорнуті в Task.
Якщо ви не повернете значення (недійсне), воно буде обгорнуто Task, якщо ви повернете intйого, воно буде загорнуте Task<int>тощо.
Якщо ваш метод асинхронізації потребує повернення, intви позначите тип повернення методу як Task<int>і ви повернетеся intне просто Task<int>. Компілятор перетворить intна Task<int>для вас.
private async Task<int> MethodName()
{
await SomethingAsync();
return 42;//Note we return int not Task<int> and that compiles
}
Самвей, коли ви повертаєтесь Task<object>, тип повернення вашого методу повинен бутиTask<Task<object>>
public async Task<Task<object>> MethodName()
{
return Task.FromResult<object>(null);//This will compile
}
Оскільки ваш метод повертається Task, він не повинен повертати жодного значення. Інакше він не компілюється.
public async Task MethodName()
{
return;//This should work but return is redundant and also method is useless.
}
Майте на увазі, що метод асинхронізації без awaitзаяви не є async.