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

329
Vistas
¿Llamar a Task.Wait() inmediatamente después de una operación asincrónica es equivalente a ejecutar la misma operación sincrónicamente?

En otras palabras, es

 var task = SomeLongRunningOperationAsync(); task.Wait();

funcionalmente idéntico a

 SomeLongRunningOperation();

Dicho de otra manera, es

 var task = SomeOtherLongRunningOperationAsync(); var result = task.Result;

funcionalmente idéntico a

 var result = SomeOtherLongRunningOperation();

De acuerdo con Wait e Inlining , si la tarea en la que se está esperando ya ha comenzado a ejecutarse, Wait tiene que bloquearse. Sin embargo, si no ha comenzado a ejecutarse, Wait puede extraer la tarea de destino del programador en el que se puso en cola y ejecutarla en línea en el subproceso actual.

¿Son esos dos casos simplemente una cuestión de decidir en qué subproceso se ejecutará la Tarea, y si está esperando el resultado de todos modos, importa?

¿Hay algún beneficio en usar el formulario asíncrono sobre el formulario síncrono, si no se ejecuta nada entre la llamada asíncrona y Wait() ?

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

0

Aquí hay algunas diferencias:

  1. El cálculo podría ejecutarse en un subproceso diferente. Podría ejecutarse en el mismo subproceso si esta tarea se basa en la CPU y se puede insertar. Esto no es determinista.
  2. Si no ocurre ninguna alineación, se utilizará un subproceso más durante el cálculo. Esto generalmente cuesta 1 MB de memoria de pila.
  3. Las excepciones se incluirán en AggregateException . La pila de excepciones será diferente.
  4. La versión de la tarea podría bloquearse si el cálculo se publica en el contexto de sincronización actual.
  5. Si el grupo de subprocesos está al máximo, esto podría bloquearse si para que la tarea se complete se debe programar otra tarea.
  6. El estado local del subproceso, como HttpContext.Current (que en realidad no es local del subproceso, pero casi), puede ser diferente.
  7. Un aborto de subproceso del subproceso principal no llegará al cuerpo de la tarea (excepto en el caso de la inserción). No estoy seguro de si la espera en sí se cancelará o no.
  8. La creación de una Task genera una barrera de memoria que puede tener un efecto de sincronización.

¿Importa esto? Decida usted mismo por esta lista.

¿Hay beneficios al hacer esto? No puedo pensar en ninguno. Si su cálculo utiliza E/S asíncrona, la espera anulará los beneficios que aporta la E/S asíncrona. La única excepción sería la E/S de abanico, por ejemplo, emitiendo 10 solicitudes HTTP en paralelo y esperándolas. De esa manera, tiene 10 operaciones al costo de un hilo.

Tenga en cuenta que Wait y Result son equivalentes en todos estos aspectos.

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