2
respostas

Duvida Async/Await

Porque devo sempre retornar uma Task quando utilizado o async na assinatura do método?

Como o exemplo dado na aula:

private async Task<string[]> ConsolidarContas(IEnumerable<ContaCliente> contas, IProgress<string> reportadorDeProgresso)
        {
            var tasks = contas.Select(conta => Task.Factory.StartNew(() =>
                {
                    var resultadoConsolidacao = r_Servico.ConsolidarMovimentacao(conta);
                    reportadorDeProgresso.Report(resultadoConsolidacao);
                    return resultadoConsolidacao;
                })
            );

            return await Task.WhenAll(tasks);
        }

Se tentar retornar o array de strings diretamente recebo um erro.

2 respostas

Olá Gabriel!

Métodos assíncronos, assim como o nome já diz, executam as chamadas a outros métodos sem travar a sua thread, em casos de aplicações de desktop, sem travar a tela do seu cliente.

Então para isso usamos a palavra async nos métodos, para indicar ao compilador que aquele método é assíncrono.

O retorno sempre será uma Task, pois estamos dizendo a quem chamar, que executaremos uma tarefa específica.

A palavra await na chamada desses métodos diz que precisamos executar e aguardar a conclusão dessa Task para, aí então, seguir com o processamento.

        static async Task Salvar()
        {
            await FazAlgo();
        }

        static async Task FazAlgo()
        {

        }

Deixo um link da Microsoft ainda com alguns exemplos de async, recomendo a dar uma olhada: https://docs.microsoft.com/pt-br/dotnet/csharp/programming-guide/concepts/async/

Se ainda tiver alguma dúvida, não deixe de perguntar!

Abraços!

Olá Gabriel, tudo bem?

Ficou com alguma duvida ainda?

Se deu tudo certo, por favor, só peço para marcar a minha resposta então como solução, assim a Alura encerra o tópico.

E dessa forma também, caso alguém tenha uma dúvida parecida com a sua, poderá ver que há uma solução e deu certo para alguém.

:)