Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

299
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!