Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

298
Visualizações
Async/Await sin espera de llamada

Tengo un método virtual que a veces contiene llamadas en espera y otras veces no. El IDE me da una advertencia, ¿cuál es la forma correcta de manejar esto?

En mi clase base:

 protected virtual async Task GoNext ()

Desde la clase base se llama a través de await.

Luego, en mis subclases, anulo este método, pero hay veces que incluye una espera y otras veces que no.

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

La palabra clave async no es en realidad parte de la firma del método heredado, sino más bien una señal para el compilador de que necesita compilar y reescribir el método de acuerdo con el patrón de los métodos asíncronos.

Como tal, puede omitir la palabra clave async en los métodos heredados si el método heredado no usa la palabra clave await .

Tenga en cuenta que aún tendrá que devolver una Task o Task<T> , esa parte es parte de la firma del método heredado.

Así que esto le dará una advertencia:

 class Base { public virtual async Task<int> Method() { await Task.Delay(10); return 42; } } class Derived : Base { // next line produces warning public override async Task<int> Method() { return 42; } }

La advertencia es esta:

Advertencia: CS1998 Este método asíncrono carece de operadores de "espera" y se ejecutará de forma síncrona. Considere usar el operador await para esperar llamadas API que no bloqueen, o await Task.Run(...) para hacer trabajo vinculado a la CPU en un subproceso en segundo plano.

Esto, sin embargo, no producirá una advertencia:

 class Derived : Base { public override Task<int> Method() { return Task.FromResult(42); } }

Tenga en cuenta que cambié la declaración de return en ese último método porque parte de la "magia" que trae la palabra clave async es envolver automáticamente el valor de retorno dentro de Task<T> . Si tiene otras formas de obtener una Task<T> , obviamente no necesita envolver el resultado como lo hice anteriormente.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda