Pular para o conteúdo principal

Questão de Programação — Linguagens de programação — Quadrix 2025

ProgramaçãoLinguagens de programação
Código
qg600015
Banca
Quadrix
Órgão
CRO-SP
Ano
2025
Nível
Superior
Cargo
Analista de Desenvolvimento de Sistemas de Informação
Durante o desenvolvimento de um sistema de gestão odontológica para uma clínica de médio porte, a equipe de tecnologia optou por criar uma aplicação multiplataforma com recursos de agendamento, prontuário eletrônico e geração de relatórios financeiros. Para isso, diferentes módulos foram desenvolvidos em C#, Python e Java, aproveitando as características específicas de cada linguagem.Com base nessa situação hipotética e nos conhecimentos a respeito de sintaxe, tipos de dados, estruturas de controle, classes, herança e polimorfismo em C#, Python e Java, julgue o item a seguir.Para melhorar a performance do módulo de agendamento no sistema da clínica, a equipe optou por utilizar Thread.Sleep() dentro de métodos assíncronos em C#, o que é recomendado para manter a responsividade da aplicação.
  1. CCerto
  2. EErrado
Revelar gabarito e comentário

GabaritoE — Errado

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Thread.Sleep() em métodos assíncronos no C#

Gabarito: E — ERRADO. A afirmação está incorreta porque Thread.Sleep() bloqueia a thread atual, o que, dentro de um método assíncrono, compromete a responsividade da aplicação. A prática recomendada para pausas em código assíncrono é usar await Task.Delay(), que libera a thread para executar outras tarefas enquanto aguarda.

O enunciado descreve uma situação em que a equipe usa Thread.Sleep() dentro de métodos assíncronos para melhorar a performance do módulo de agendamento. Essa abordagem é um erro clássico de programação assíncrona. Para entender por que, é preciso compreender a diferença fundamental entre os dois métodos.

Thread.Sleep() é um método síncrono que suspende a execução da thread atual por um período especificado. Durante esse tempo, a thread fica bloqueada e não pode executar nenhuma outra tarefa. Em uma aplicação com interface gráfica (como um sistema de gestão odontológica), isso congela a interface, tornando-a não responsiva. Em uma aplicação web, isso ocupa uma thread do pool, reduzindo a capacidade de atender outras requisições.

await Task.Delay() é um método assíncrono que cria uma tarefa que é concluída após um atraso. A palavra-chave await faz com que o método assíncrono retorne imediatamente ao chamador, liberando a thread atual. Quando o atraso termina, a execução do método é retomada em uma thread disponível. Isso mantém a aplicação responsiva, pois a thread não fica bloqueada.

A confusão entre Thread.Sleep() e Task.Delay() é uma pegadinha comum em questões de concursos. A banca explora exatamente essa troca: o candidato que sabe que Thread.Sleep() bloqueia a thread e que isso é ruim para a responsividade, mas não conhece a alternativa correta (Task.Delay()), pode acabar marcando a alternativa como correta. No entanto, a afirmação diz que usar Thread.Sleep() é "recomendado para manter a responsividade", o que é exatamente o oposto da verdade.

NÃO CAIA NESSA!

A banca troca o método correto pelo incorreto. Ela afirma que Thread.Sleep() é recomendado para manter a responsividade, mas esse método bloqueia a thread. O correto seria usar await Task.Delay(), que libera a thread. O candidato que conhece a diferença entre os dois métodos identifica o erro imediatamente.

Pausa em código assíncrono (C#)
  • 1Thread.Sleep()
    • Bloqueia a thread atual
    • Congela a interface
    • Ocupa thread do pool
  • 2await Task.Delay()
    • Libera a thread
    • Mantém a responsividade
    • Retoma em thread disponível
LEVEL · soulevel.com.br

Item — ❌ Errado

A afirmação está incorreta porque Thread.Sleep() bloqueia a thread atual, impedindo que ela execute outras tarefas. Dentro de um método assíncrono, isso anula o propósito da assincronicidade, que é justamente não bloquear a thread. Para manter a responsividade, o correto é usar await Task.Delay(), que libera a thread enquanto aguarda.

Gabarito: E — ERRADO.

Link permanente: /questoes/qg600015