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

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

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