asyncmétodos são diferentes dos métodos normais. O que você retornar dos asyncmé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, intmarque o tipo de retorno do método como Task<int>e você retornará sem inta opção Task<int>. Compilador irá converter o intque 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 awaitdeclaração não é async.