Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Costruttore Task (Action)

 

Data di pubblicazione: novembre 2016

Inizializza un nuovo oggetto Task con l'azione specificata.

Spazio dei nomi:   System.Threading.Tasks
Assembly:  mscorlib (in mscorlib.dll)

public Task(
	Action action
)

Parametri

action
Type: System.Action

Delegato che rappresenta il codice da eseguire nell'attività.

Exception Condition
ArgumentNullException

Il valore dell'argomento action è null.

Anziché chiamare questo costruttore, il modo più comune per creare un'istanza di un Task oggetto e avviare un'attività è chiamando il metodo statico Task.Run(Action) o TaskFactory.StartNew(Action) (metodo). L'unico vantaggio offerto da questo costruttore è che consente la creazione di istanze di oggetto essere separati dalla chiamata di attività.

Nell'esempio seguente viene utilizzata la Task(Action) costruttore per creare le attività che recuperano i nomi dei file nelle directory specificate. Tutte le attività di scrivere i nomi dei file in un unico ConcurrentBag<T> oggetto. L'esempio chiama quindi il WaitAll(Task[]) metodo per assicurarsi che tutte le attività completate e quindi visualizza un conteggio del numero totale di nomi di file scritti per il ConcurrentBag<T> oggetto.

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

Nell'esempio seguente è identico, ad eccezione del fatto che utilizzato il Run(Action) metodo per creare un'istanza ed eseguire l'attività in un'unica operazione. Il metodo restituisce il Task oggetto che rappresenta l'attività.

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

Universal Windows Platform
Disponibile da 8
.NET Framework
Disponibile da 4.0
Libreria di classi portabile
Supportato in: piattaforme .NET portabili
Silverlight
Disponibile da 5.0
Windows Phone Silverlight
Disponibile da 8.0
Windows Phone
Disponibile da 8.1
Torna all'inizio
Mostra: