async
métodos são diferentes dos métodos normais. O que você retornar dos async
métodos está envolvido em um Task
.
Se você não retornar nenhum valor (nulo), ele será quebrado Task
, se você retornar int
, será quebrado Task<int>
e assim por diante.
Se seu método assíncrono precisar retornar, int
marque o tipo de retorno do método como Task<int>
e você retornará sem int
a opção Task<int>
. Compilador irá converter o int
que Task<int>
para você.
private async Task<int> MethodName()
{
await SomethingAsync();
return 42;//Note we return int not Task<int> and that compiles
}
Da mesma forma, quando você retorna Task<object>
, o tipo de retorno do método deve serTask<Task<object>>
public async Task<Task<object>> MethodName()
{
return Task.FromResult<object>(null);//This will compile
}
Como seu método está retornando Task
, ele não deve retornar nenhum valor. Caso contrário, não será compilado.
public async Task MethodName()
{
return;//This should work but return is redundant and also method is useless.
}
Lembre-se de que o método assíncrono sem uma await
declaração não é async
.