Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

178
Vistas
¿Por qué tengo que usar await para que un método se ejecute de forma asíncrona? ¿Qué pasa si no quiero esperar a que termine el método antes de continuar?

He estado revisando documentos de MSDN todo el día y su filosofía de codificación asincrónica me confunde. Según tengo entendido, el subproceso que llama al método asíncrono no se bloqueará si se llama al método asíncrono. Sin embargo, async siempre se empareja en los ejemplos con await, lo que parece negar la asincronía, lo que hace que el método externo SÍ tenga que esperar a que el código se ejecute de todos modos. ¿No debería poder llamar a un método asíncrono y luego continuar con la ejecución del método externo?

Este es el escenario que he estado encontrando, más o menos:

 void reportSomethingHappened(info) - Collect info - HTTP POST info to logging server (ie. mixpanel, sentry)

Y aquí sería un método de llamada:

 void largerProcess if (whatever) reportSomethingHappened(); bla; bla;

Según tengo entendido, dado que las solicitudes POST se pueden realizar de forma asíncrona, debería poder convertir reportSomethingHappened() en un método asíncrono (por, AFAIK, esperando la solicitud web y agregando la palabra clave asíncrona).

Pero el método largeProcess no necesita esperar (es decir, esperar) que el método de informe finalice para ejecutar bla bla. Sin embargo, VS me dice que con un método asíncrono puedo esperarlo o sucederá sincrónicamente y bloquearé. ¿Eso no anula el propósito de hacerlo por separado?

¿Cómo escribo esto para que reportSomethingHappened no bloquee la ejecución de un proceso más grande? (Lo que me confunde inherentemente, porque pensé que ese era el punto de asincronía todo el tiempo)

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Si llama a un método asíncrono, se ejecutará de forma asíncrona tanto si await la tarea devuelta como si no.

await no afecta cómo se ejecuta el método, solo cómo usted, como la persona que llama, lo maneja. Puede llamar al método asíncrono, obtener la tarea y esperarla de inmediato (que es la opción más simple). Eso le permitirá escribir código que parece síncrono pero se ejecuta de forma asíncrona, ya que await básicamente registra el resto del código después de él como una devolución de llamada que se ejecutará solo después de que se complete la tarea esperada. Esto no se bloquea en el tradicional ya que no se bloquea ningún hilo, pero el flujo de código será secuencial:

 async Task LargerProcessAsync() { if (condition) { await ReportSomethingHappenedAsync(); } // do other stuff }

Sin embargo, no es absolutamente necesario que hagas eso. Puede recuperar la tarea, hacer otras cosas y solo await :

 async Task LargerProcessAsync() { Task task = null; if (condition) { task = ReportSomethingHappenedAsync(); } // do other stuff if (task != null) { await task; } }

O simplemente puede eliminar la await por completo. Sin embargo, debe darse cuenta de que esto puede ser peligroso ya que la tarea puede fallar y la excepción puede pasar desapercibida y es por eso que no se recomienda. Hay varias maneras de hacer esto bien, pero no son simples. Puedes usar Task.ContinueWith :

 void LargerProcess() { if (condition) { ReportSomethingHappenedAsync().ContinueWith(task => { try { task.Wait(); } catch (Exception exception) { // handle exception } }) } // do other stuff }

O para ASP.Net, mire Fire and Forget en ASP.NET

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda