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
.