Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Constructor Task (Action)

 

Publicado: noviembre de 2016

Inicializa una nueva instancia de Task con la acción especificada.

Espacio de nombres:   System.Threading.Tasks
Ensamblado:  mscorlib (en mscorlib.dll)

public Task(
	Action action
)

Parámetros

action
Type: System.Action

Delegado que representa el código que se va a ejecutar en la tarea.

Exception Condition
ArgumentNullException

El argumento action es null.

En lugar de llamar a este constructor, la manera más común para crear instancias de un Task objeto e inicie una tarea que se está llamando a estático Task.Run(Action) o TaskFactory.StartNew(Action) (método). La única ventaja que ofrece este constructor es que permite la creación de instancias de objeto se separa de la invocación de la tarea.

En el ejemplo siguiente se usa el Task(Action) constructor para crear tareas que recuperar los nombres de archivo en los directorios especificados. Todas las tareas de escriban los nombres de archivo en una sola ConcurrentBag<T> objeto. El ejemplo llama a la WaitAll(Task[]) método para asegurarse de que han completado todas las tareas y, a continuación, se muestra un recuento del número total de nombres de archivo que se escriben en el ConcurrentBag<T> objeto.

using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      var list = new ConcurrentBag<string>();
      string[] dirNames = { ".", ".." };
      List<Task> tasks = new List<Task>();
      foreach (var dirName in dirNames) {
         Task t = new Task( () => { foreach(var path in Directory.GetFiles(dirName))
                                    list.Add(path); }  );
         tasks.Add(t);
         t.Start();
      }
      Task.WaitAll(tasks.ToArray());
      foreach (Task t in tasks)
         Console.WriteLine("Task {0} Status: {1}", t.Id, t.Status);

      Console.WriteLine("Number of files read: {0}", list.Count);
   }
}
// The example displays output like the following:
//       Task 1 Status: RanToCompletion
//       Task 2 Status: RanToCompletion
//       Number of files read: 23

El ejemplo siguiente es idéntico, salvo que usa el Run(Action) método para crear instancias y ejecutar la tarea en una sola operación. El método devuelve el Task objeto que representa la tarea.

using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      var list = new ConcurrentBag<string>();
      string[] dirNames = { ".", ".." };
      List<Task> tasks = new List<Task>();
      foreach (var dirName in dirNames) {
         Task t = Task.Run( () => { foreach(var path in Directory.GetFiles(dirName)) 
                                       list.Add(path); }  );
         tasks.Add(t);
      }
      Task.WaitAll(tasks.ToArray());
      foreach (Task t in tasks)
         Console.WriteLine("Task {0} Status: {1}", t.Id, t.Status);

      Console.WriteLine("Number of files read: {0}", list.Count);
   }
}
// The example displays output like the following:
//       Task 1 Status: RanToCompletion
//       Task 2 Status: RanToCompletion
//       Number of files read: 23

Plataforma universal de Windows
Disponible desde 8
.NET Framework
Disponible desde 4.0
Biblioteca de clases portable
Se admite en: plataformas portátiles de .NET
Silverlight
Disponible desde 5.0
Windows Phone Silverlight
Disponible desde 8.0
Windows Phone
Disponible desde 8.1
Volver al principio
Mostrar: