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

368
Visualizações
¿Por qué es esto diferente? Asíncrono ejecutándose secuencialmente frente a paralelo

Dado este:

 private static async Task<int> Operation1() { await Task.Delay(1000); return 1; } private static async Task<int> Operation2() { await Task.Delay(1000); return 1; }

esto se ejecuta secuencialmente, es decir, tarda 2 segundos (medido con Stopwatch )

 var a = await Operation1(); var b = await Operation2(); var result = Operation3(a, b);

mientras que esto toma solo 1 segundo, ejecutando las cosas en paralelo:

 var taskA = Operation1(); var taskB = Operation2(); var a = await taskA; var b = await taskB; var result = Operation3(a, b);

¿Porqué es eso? Asumiría totalmente que esos 2 son equivalentes y producen el mismo IL.

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

En el primer caso Operation2() no se ejecuta ni inicia una tarea hasta que se completa la tarea devuelta por Operation1() .

En el segundo caso, tanto Operation1() como Operation2() se ejecutan, creando e iniciando sus tareas antes de await la finalización de la tarea devuelta por Operation1()

over 4 years ago · Santiago Trujillo Relatório

0

En el primer ejemplo, inicia Operation1 y espera hasta que finalice, luego inicia Operation2 .

En el segundo ejemplo, inicia Operation1 y luego Operation2 , después de lo cual espera Operation1 y luego Operation2 .

Entonces Operation1 y Operation2 se ejecutan en paralelo en el segundo ejemplo y secuencialmente en el primero.

over 4 years ago · Santiago Trujillo Relatório

0

El primer fragmento de código es equivalente a esto:

 var taskA = Operation1(); var a = await taskA; // At this point the taskA is completed var taskB = Operation2(); var b = await taskB;

Ahora debería ser obvio por qué no es equivalente a la segunda versión:

 var taskA = Operation1(); var taskB = Operation2(); // At this point both tasks are started, and probably none is completed var a = await taskA; var b = await taskB;

Como nota al margen, uno de estos dos enfoques demuestra una mala práctica. ¿Puedes adivinar si es el primer o el segundo enfoque? Puede encontrar la respuesta a este cuestionario en la primera revisión de esta respuesta.

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