Advertisement
Fhernd

EjecucionMultiplesTareas.cs

Jun 23rd, 2016
2,900
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.72 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Threading;
  4. using System.Threading.Tasks;
  5.  
  6. namespace Recetas.Multithreading.R0408
  7. {
  8.     public class EjecuionMultiplesTareas
  9.     {
  10.         public static void Main()
  11.         {
  12.             Console.WriteLine ();
  13.            
  14.             Task<int> tarea1 = new Task<int>( () => Tarea("Tarea No. 1", 3));
  15.             Task<int> tarea2 = new Task<int>( () => Tarea("Tarea No. 2", 2));
  16.             var tareaCompuesta = Task.WhenAll(tarea1, tarea2);
  17.            
  18.             // Continuación para la tarea compuesta:
  19.             tareaCompuesta.ContinueWith( t =>
  20.                 Console.WriteLine ("Primera respuesta {0}, segunda respuesta: {1}.",
  21.                 t.Result[0], t.Result[1]));
  22.            
  23.             // Inicio ejecución tareas:
  24.             tarea1.Start();
  25.             tarea2.Start();
  26.            
  27.             // Suspensión temporal:
  28.             Thread.Sleep(TimeSpan.FromSeconds(4));
  29.            
  30.             Console.WriteLine ();
  31.            
  32.             // Conjunto de tareas:
  33.             var tareas = new List<Task<int>>();
  34.            
  35.             // Creación conjunto de tareas:
  36.             for (int i = 3; i < 6; ++i)
  37.             {
  38.                 int contador = i;
  39.                 Task<int> tarea = new Task<int>( () => Tarea(
  40.                     String.Format("Tarea No. {0}", contador), contador));
  41.                 tareas.Add(tarea);
  42.                 tarea.Start();
  43.             }
  44.            
  45.             // Mientras que hayan tareas por terminar:
  46.             while (tareas.Count > 0)
  47.             {
  48.                 // Obtiene cualquiera de las tareas que haya terminado:
  49.                 var tareaCompletada = Task.WhenAny(tareas).Result;
  50.                
  51.                 // Elimina la tarea que ya terminó de la lista:
  52.                 tareas.Remove(tareaCompletada);
  53.                
  54.                 // Muestra en la salida estándar el resultado de la tarea terminada:
  55.                 Console.WriteLine ("La tarea que acaba de terminar generó como resultado: {0}.",
  56.                     tareaCompletada.Result);
  57.             }
  58.            
  59.             Console.WriteLine ();
  60.         }
  61.    
  62.         public static int Tarea(string nombre, int duracion)
  63.         {
  64.             Console.WriteLine("La tarea `{0}` se está ejecutando en el ID de Thread {1}. "
  65.                 + "¿Thread en pool de threads?: {2}", nombre,
  66.                 Thread.CurrentThread.ManagedThreadId,
  67.                 Thread.CurrentThread.IsThreadPoolThread);
  68.                
  69.             // Simulación de ejecución tardía:
  70.             Thread.Sleep (TimeSpan.FromSeconds(duracion));
  71.            
  72.             return 42 * duracion;
  73.         }
  74.     }
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement