Saltar al contenido

Ejecute dos tareas asíncronas en paralelo y recopile los resultados en .NET 4.5

Posterior a observar en diferentes repositorios y sitios webs de internet al final dimos con la respuesta que te compartiremos ahora.

Solución:

async Task LongTask1()  
  ...
  return 0; 


async Task LongTask2()  
  ...
  return 1; 


...

   Task t1 = LongTask1();
   Task t2 = LongTask2();
   await Task.WhenAll(t1,t2);
   //now we have t1.Result and t2.Result

Debe usar Task.Delay en lugar de Sleep para la programación asíncrona y luego use Task.WhenAll para combinar los resultados de la tarea. Las tareas se ejecutarían en paralelo.

public class Program
    
        static void Main(string[] args)
        
            Go();
        
        public static void Go()
        
            GoAsync();
            Console.ReadLine();
        
        public static async void GoAsync()
        

            Console.WriteLine("Starting");

            var task1 = Sleep(5000);
            var task2 = Sleep(3000);

            int[] result = await Task.WhenAll(task1, task2);

            Console.WriteLine("Slept for a total of " + result.Sum() + " ms");

        

        private async static Task Sleep(int ms)
        
            Console.WriteLine("Sleeping for 0 at 1", ms, Environment.TickCount);
            await Task.Delay(ms);
            Console.WriteLine("Sleeping for 0 finished at 1", ms, Environment.TickCount);
            return ms;
        
    

mientras tu Sleep el método es asíncrono, Thread.Sleep no es. La idea general de async es reutilizar un solo hilo, no iniciar múltiples hilos. Debido a que bloqueó el uso de una llamada síncrona a Thread.Sleep, no funcionará.

asumo que Thread.Sleep es una simplificación de lo que realmente quieres hacer. ¿Se puede codificar su implementación real como métodos asíncronos?

Si necesita ejecutar múltiples llamadas de bloqueo síncrono, ¡busque en otra parte, creo!

Puntuaciones y reseñas

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *