Questão de Programação — Linguagens de programação — Quadrix 2025
- Código
- qg600015
- Banca
- Quadrix
- Órgão
- CRO-SP
- Ano
- 2025
- Nível
- Superior
- Cargo
- Analista de Desenvolvimento de Sistemas de Informação
- CCerto
- EErrado
GabaritoE — Errado
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.
Já 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.
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.
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