Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Professor, Dúvida!

Primeiro, queria elogiar a qualidade da aula do senhor. muito boa mesmo, consegui entender varias coisas que pra mim antes era tipo ???. Vamos lá.. ate o momento o senho me mostrou que um metodo pode ser async com retorno de uma task ex. public async Task Metodo(), tambem pode ser sem retorno public async void Metodo e pode ter o retorno gererico, mas a minha duvida é nos dois primeiros. Antes de ver esse assunto ate o momento todo metodo que tinha um retorno definido, tinha que ter um return; em seu corpo. Porem eu vi que qd o retorno é Task ele nao da erro de compilação meesmo sem retorna explicitamente com a palavra return. Sendo necessario apenas ter o await, entao minha duvida é qd a tarefa n retorna valor mas o metodo devolve uma tarefa. e nao tem return o que elas devolve?. Como ela sabe que a task terminou? ex: Veja que no metodo3 ele retorn uma Task mas nao precisei escrever return, entao ele return algo?

async void MetodoAsync1()
{
    var tasks = MetodoAsync2();
    var taskss =  MetodoAsync3();
}
async Task MetodoAsync2()
{
    return await Task
}
async Task MetodoAsync3()
{
    await Task
}
1 resposta
solução!

Olá, Luccas.

Tudo bem?

Primeiramente, muito obrigado pelo elogio! Ficamos felizes que as aulas estejam sendo úteis para você, e que está gostando da didática do professor.

Sobre a sua dúvida, vamos esclarecer alguns pontos sobre métodos assíncronos e o uso de Task no C#.

Quando você declara um método como async Task e não utiliza a palavra-chave return, o compilador entende que o método deve retornar uma Task que representa a operação assíncrona. A palavra-chave await é usada para esperar a conclusão de uma tarefa assíncrona. Quando o método atinge o final de seu corpo, ele automaticamente completa a Task retornada.

Veja o seu exemplo:

async Task MetodoAsync3()
{
    await Task.Delay(1000); // Simula uma operação assíncrona
}

Neste caso, MetodoAsync3 retorna uma Task que será completada quando a operação Task.Delay(1000) for concluída. Não é necessário usar a palavra-chave return explicitamente, porque o método já está configurado para retornar uma Task que representa a operação assíncrona.

Para ilustrar melhor, veja um exemplo prático:

async Task MetodoAsync4()
{
    // Simula uma operação assíncrona de 2 segundos
    await Task.Delay(2000);
    // A Task retornada será completada automaticamente após o delay
}

Quando você chama MetodoAsync4, ele retorna uma Task que será completada após 2 segundos. Não há necessidade de um return explícito porque o await já está aguardando a conclusão da operação assíncrona.

Então, respondendo diretamente à sua pergunta: quando um método assíncrono com retorno Task não possui um return, ele retorna uma Task que será completada quando todas as operações assíncronas dentro do método forem concluídas. O compilador gerencia isso automaticamente para você.

Espero ter ajudado e bons estudos!