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
.