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

191
Vistas
¿Cuál es una buena alternativa para esperar a que Task.Run ejecute una lambda asíncrona?

Estoy en el proceso de actualizar el código antiguo usando BackgroundWorker . Siguiendo una serie de artículos de Stephen Cleary sobre este tema, creo que el sustituto ideal en este caso es Task.Run() .

La mía es una aplicación de Windows Forms. Cuando se construye un formulario, se inician diferentes operaciones en segundo plano y sus resultados se recopilan en diferentes controladores de eventos, según el patrón BackgroundWorker .

Ahora, mis nuevos métodos siguen el patrón async/await. Tengo algunas preocupaciones acerca de llamar a Task.Run() en métodos asincrónicos.

 private async void FormEventHandler(object sender, EventArgs e) { Task.Run(async () => await AwaitableLongRunningTask_1()); Task.Run(async () => await AwaitableLongRunningTask_2()); //... }

AwaitableLongRunningTask_1 y _2 deben ser asíncronos, ya que las llamadas que realizan dentro del cuerpo del método son métodos asíncronos.

No puedo llamarlos en una sucesión de espera simple:

 private async void FormEventHandler(object sender, EventArgs e) { await AwaitableLongRunningTask_1(); await AwaitableLongRunningTask_2(); //... }

ya que deben iniciarse en paralelo y obviamente son tareas de larga duración que duran varios segundos.

Entonces, mi pregunta es, ¿debo refactorizar AwaitableLongRunningTasks para que no sean asíncronas, cambiando su comportamiento interno como se sugiere aquí en "Cómo llamar al método asincrónico desde el método sincrónico" ? ¿Hay mejores opciones que me estoy perdiendo?

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

0

Utilice Task.WhenAll

 private async void FormEventHandler(object sender, EventArgs e) { await Task.WhenAll( AwaitableLongRunningTask_1(), AwaitableLongRunningTask_2()); }
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