DEV Community

Antônio Pedro
Antônio Pedro

Posted on

Código síncrono e assíncrono. Qual a diferença entre eles e como pode afetar as requisições?

Ao iniciar os estudos na área de programação, a maior parte das pessoas escrevem códigos síncronos (sem saber do que se trata) mas em uma aplicação real tudo pode mudar. De maneira breve e direta um código síncrono é executado desde a primeira linha até a última linha de código (bloqueando a thread e caso ocorram falhas, irá interromper a aplicação), porém o código assíncrono não. Exemplo:

Síncrono

public string GetHello()
{
    return "Hello";
}
Enter fullscreen mode Exit fullscreen mode

Assíncrono

[HttpGet("Products")]
public async Task<IActionResult> GetProducts()
{
    var products = await _productRepository.GetAllProductsAsync();

    if (products == null)
    {
        return NotFound("No Products Found");
    }

    return Ok(products);
}
Enter fullscreen mode Exit fullscreen mode

Para utilizar a programação assíncrona devem ser usadas as duas palavras-chave ASYNC e AWAIT.

  • Async -> Indica que o endpoint / operação é assíncrona
  • Await -> Aguarda o resultado da operação (sem bloquear a thread). Caso a operação seja realizada com sucesso, retornará o resultado esperado, senão irá lançar uma exceção.

Quando deve ser implementado o sincronismo e assincronismo?

Para isso é necessário entender o que é uma THREAD. Por definição, thread é a menor unidade de processamento que um sistema operacional gerencia, permitindo a divisão de um processo em tarefas menores para executá-las paralelamente.

Em relação ao assincronismo, no padrão mais usual, toda requisição a ser feita terá uma thread retirada do pool de threads (repositório de threads já criadas e reutilizáveis) e essa thread irá aguardar o resultado da operação e retornar para o pool de threads, todavia sem travar o resto da aplicação. Já o sincronismo bloqueia a thread e caso falhe, irá lançar uma exceção (interrompendo a aplicação).

Utiliza-se programação assíncrona em casos de operações demoradas:

  • Consulta ao banco de dados
  • Chamada para outra API
  • Registro de um usuário
  • Carregar imagens

Utiliza-se programação síncrona em casos de operações mais rápidas (não dependem tanto da entrada/saída):

  • Validações internas
  • Manipulação de objetos em memória
  • Cálculos matemáticos simples

Top comments (1)

Collapse
 
lucasgabrielfaustinodasilva profile image
Lucas Gabriel

Muito bom o artigo!