asyncметоды отличаются от обычных методов. Все, что вы возвращаете из asyncметодов, завернуто в файл Task.
Если вы не вернете значение (void), оно будет обернуто 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.