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

186
Visualizações
¿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 Respostas
Responde à pergunta

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 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