Task Construtores

Definição

Inicializa um novo Task.

Sobrecargas

Task(Action)

Inicializa um novo Task com a ação especificada.

Task(Action, CancellationToken)

Inicializa um novo Task com a ação especificada e CancellationToken.

Task(Action, TaskCreationOptions)

Inicializa um novo Task com a ação especificada e opções de criação.

Task(Action<Object>, Object)

Inicializa um novo Task com a ação especificada e estado.

Task(Action, CancellationToken, TaskCreationOptions)

Inicializa um novo Task com a ação especificada e opções de criação.

Task(Action<Object>, Object, CancellationToken)

Inicializa um novo Task com a ação, o estado e CancellationTokeno especificados.

Task(Action<Object>, Object, TaskCreationOptions)

Inicializa um novo Task com a ação, o estado e as opções especificados.

Task(Action<Object>, Object, CancellationToken, TaskCreationOptions)

Inicializa um novo Task com a ação, o estado e as opções especificados.

Task(Action)

Origem:
Task.cs
Origem:
Task.cs
Origem:
Task.cs

Inicializa um novo Task com a ação especificada.

public Task (Action action);

Parâmetros

action
Action

O delegado que representa o código a ser executado na tarefa.

Exceções

O argumento action é null.

Exemplos

O exemplo a seguir usa o Task(Action) construtor para criar tarefas que recuperam os nomes de arquivo em diretórios especificados. Todas as tarefas gravam os nomes de arquivo em um único ConcurrentBag<T> objeto. Em seguida, o exemplo chama o WaitAll(Task[]) método para garantir que todas as tarefas tenham sido concluídas e, em seguida, exibe uma contagem do número total de nomes de arquivo gravados no 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 async Task 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();
      }
      await Task.WhenAll(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

O exemplo a seguir é idêntico, exceto que ele usou o Run(Action) método para instanciar e executar a tarefa em uma única operação. O método retorna o Task objeto que representa a tarefa.

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

Comentários

Esse construtor só deve ser usado em cenários avançados em que é necessário que a criação e o início da tarefa sejam separados.

Em vez de chamar esse construtor, a maneira mais comum de instanciar um Task objeto e iniciar uma tarefa é chamando o método ou TaskFactory.StartNew(Action) estáticoTask.Run(Action).

Se uma tarefa sem nenhuma ação for necessária apenas para que o consumidor de uma API tenha algo a aguardar, um TaskCompletionSource<TResult> deverá ser usado.

Confira também

Aplica-se a

.NET 9 e outras versões
Produto Versões
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

Task(Action, CancellationToken)

Origem:
Task.cs
Origem:
Task.cs
Origem:
Task.cs

Inicializa um novo Task com a ação especificada e CancellationToken.

public Task (Action action, System.Threading.CancellationToken cancellationToken);

Parâmetros

action
Action

O delegado que representa o código a ser executado na tarefa.

cancellationToken
CancellationToken

O CancellationToken que a nova tarefa observará.

Exceções

O CancellationToken fornecido já foi descartado.

O argumento action é nulo.

Exemplos

O exemplo a seguir chama o Task(Action, CancellationToken) construtor para criar uma tarefa que itera os arquivos no diretório C:\Windows\System32. A expressão lambda chama o Parallel.ForEach método para adicionar informações sobre cada arquivo a um List<T> objeto . Cada tarefa aninhada desanexada invocada pelo Parallel.ForEach loop verifica o estado do token de cancelamento e, se o cancelamento for solicitado, chama o CancellationToken.ThrowIfCancellationRequested método . O CancellationToken.ThrowIfCancellationRequested método gera uma exceção OperationCanceledException que é tratada em um catch bloco quando o thread de chamada chama o Task.Wait método . Em Start seguida, o método é chamado para iniciar a tarefa.

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

public class Example
{
   public static async Task Main()
   {
      var tokenSource = new CancellationTokenSource();
      var token = tokenSource.Token;
      var files = new List<Tuple<string, string, long, DateTime>>();
      
      var t = new Task(() => { string dir = "C:\\Windows\\System32\\";
                               object obj = new Object();
                               if (Directory.Exists(dir)) {
                                  Parallel.ForEach(Directory.GetFiles(dir),
                                  f => {
                                          if (token.IsCancellationRequested)
                                             token.ThrowIfCancellationRequested();
                                          var fi = new FileInfo(f);
                                          lock(obj) {
                                             files.Add(Tuple.Create(fi.Name, fi.DirectoryName, fi.Length, fi.LastWriteTimeUtc));          
                                          }
                                     });
                                }
                              } , token);
      t.Start();
      tokenSource.Cancel();
      try {
         await t; 
         Console.WriteLine("Retrieved information for {0} files.", files.Count);
      }
      catch (AggregateException e) {
         Console.WriteLine("Exception messages:");
         foreach (var ie in e.InnerExceptions)
            Console.WriteLine("   {0}: {1}", ie.GetType().Name, ie.Message);

         Console.WriteLine("\nTask status: {0}", t.Status);       
      }
      finally {
         tokenSource.Dispose();
      }
   }
}
// The example displays the following output:
//       Exception messages:
//          TaskCanceledException: A task was canceled.
//       
//       Task status: Canceled

Comentários

Em vez de chamar esse construtor, a maneira mais comum de instanciar um Task objeto e iniciar uma tarefa é chamando os métodos e TaskFactory.StartNew(Action, CancellationToken) estáticosTask.Run(Action, CancellationToken). A única vantagem oferecida por esse construtor é que ele permite que a instanciação de objeto seja separada da invocação de tarefa.

Para obter mais informações, consulte Paralelismo de tarefas (biblioteca de paralelismo de tarefas) e Cancelamento em threads gerenciados.

Aplica-se a

.NET 9 e outras versões
Produto Versões
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

Task(Action, TaskCreationOptions)

Origem:
Task.cs
Origem:
Task.cs
Origem:
Task.cs

Inicializa um novo Task com a ação especificada e opções de criação.

public Task (Action action, System.Threading.Tasks.TaskCreationOptions creationOptions);

Parâmetros

action
Action

O delegado que representa o código a ser executado na tarefa.

creationOptions
TaskCreationOptions

O TaskCreationOptions usado para personalizar o comportamento da tarefa.

Exceções

O argumento action é nulo.

O argumento creationOptions especifica um valor inválido para TaskCreationOptions.

Comentários

Em vez de chamar esse construtor, a maneira mais comum de instanciar um Task objeto e iniciar uma tarefa é chamando o método estático TaskFactory.StartNew(Action, TaskCreationOptions) . A única vantagem oferecida por esse construtor é que ele permite que a instanciação de objeto seja separada da invocação de tarefa.

Aplica-se a

.NET 9 e outras versões
Produto Versões
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

Task(Action<Object>, Object)

Origem:
Task.cs
Origem:
Task.cs
Origem:
Task.cs

Inicializa um novo Task com a ação especificada e estado.

public Task (Action<object> action, object state);
public Task (Action<object?> action, object? state);

Parâmetros

action
Action<Object>

O delegado que representa o código a ser executado na tarefa.

state
Object

Um objeto que representa dados a serem usados pela ação.

Exceções

O argumento action é nulo.

Exemplos

O exemplo a seguir define uma matriz de palavras de 6 letras. Cada palavra é então passada como um argumento para o Task(Action<Object>, Object) construtor, cujo Action<T> delegado embaralha os caracteres na palavra, em seguida, exibe a palavra original e sua versão mexida.

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

public class Example
{
   public static async Task Main()
   {
      var tasks = new List<Task>();
      Random rnd = new Random();
      Object lockObj = new Object();
      String[] words6 = { "reason", "editor", "rioter", "rental",
                          "senior", "regain", "ordain", "rained" };

      foreach (var word6 in words6) {
         Task t = new Task( (word) => { Char[] chars = word.ToString().ToCharArray();
                                        double[] order = new double[chars.Length];
                                        lock (lockObj) {
                                           for (int ctr = 0; ctr < order.Length; ctr++)
                                              order[ctr] = rnd.NextDouble();
                                           }
                                        Array.Sort(order, chars);
                                        Console.WriteLine("{0} --> {1}", word,
                                                          new String(chars));
                                      }, word6);
         t.Start();
         tasks.Add(t);
      }
      await Task.WhenAll(tasks.ToArray());
   }
}
// The example displays output like the following:
//    regain --> irnaeg
//    ordain --> rioadn
//    reason --> soearn
//    rained --> rinade
//    rioter --> itrore
//    senior --> norise
//    rental --> atnerl
//    editor --> oteird

Comentários

Em vez de chamar esse construtor, a maneira mais comum de instanciar um Task objeto e iniciar uma tarefa é chamando o método estático TaskFactory.StartNew(Action<Object>, Object) . A única vantagem oferecida por esse construtor é que ele permite que a instanciação de objeto seja separada da invocação de tarefa.

Confira também

Aplica-se a

.NET 9 e outras versões
Produto Versões
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

Task(Action, CancellationToken, TaskCreationOptions)

Origem:
Task.cs
Origem:
Task.cs
Origem:
Task.cs

Inicializa um novo Task com a ação especificada e opções de criação.

public Task (Action action, System.Threading.CancellationToken cancellationToken, System.Threading.Tasks.TaskCreationOptions creationOptions);

Parâmetros

action
Action

O delegado que representa o código a ser executado na tarefa.

cancellationToken
CancellationToken

O CancellationToken que a nova tarefa observará.

creationOptions
TaskCreationOptions

O TaskCreationOptions usado para personalizar o comportamento da tarefa.

Exceções

O CancellationTokenSource que criou cancellationToken já foi descartado.

O argumento action é nulo.

O argumento creationOptions especifica um valor inválido para TaskCreationOptions.

Comentários

Em vez de chamar esse construtor, a maneira mais comum de instanciar um Task objeto e iniciar uma tarefa é chamando o método estático TaskFactory.StartNew(Action, CancellationToken, TaskCreationOptions, TaskScheduler) . A única vantagem oferecida por esse construtor é que ele permite que a instanciação de objeto seja separada da invocação de tarefa.

Para obter mais informações, consulte Paralelismo de tarefas (biblioteca paralela de tarefas) e Cancelamento de tarefas.

Aplica-se a

.NET 9 e outras versões
Produto Versões
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

Task(Action<Object>, Object, CancellationToken)

Origem:
Task.cs
Origem:
Task.cs
Origem:
Task.cs

Inicializa um novo Task com a ação, o estado e CancellationTokeno especificados.

public Task (Action<object> action, object state, System.Threading.CancellationToken cancellationToken);
public Task (Action<object?> action, object? state, System.Threading.CancellationToken cancellationToken);

Parâmetros

action
Action<Object>

O delegado que representa o código a ser executado na tarefa.

state
Object

Um objeto que representa dados a serem usados pela ação.

cancellationToken
CancellationToken

O CancellationToken que a nova tarefa observará.

Exceções

O CancellationTokenSource que criou cancellationToken já foi descartado.

O argumento action é nulo.

Comentários

Em vez de chamar esse construtor, a maneira mais comum de instanciar um Task objeto e iniciar uma tarefa é chamando o método estático TaskFactory.StartNew(Action<Object>, Object, CancellationToken) . A única vantagem oferecida por esse construtor é que ele permite que a instanciação de objeto seja separada da invocação de tarefa.

Aplica-se a

.NET 9 e outras versões
Produto Versões
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

Task(Action<Object>, Object, TaskCreationOptions)

Origem:
Task.cs
Origem:
Task.cs
Origem:
Task.cs

Inicializa um novo Task com a ação, o estado e as opções especificados.

public Task (Action<object> action, object state, System.Threading.Tasks.TaskCreationOptions creationOptions);
public Task (Action<object?> action, object? state, System.Threading.Tasks.TaskCreationOptions creationOptions);

Parâmetros

action
Action<Object>

O delegado que representa o código a ser executado na tarefa.

state
Object

Um objeto que representa dados a serem usados pela ação.

creationOptions
TaskCreationOptions

O TaskCreationOptions usado para personalizar o comportamento da tarefa.

Exceções

O argumento action é nulo.

O argumento creationOptions especifica um valor inválido para TaskCreationOptions.

Comentários

Em vez de chamar esse construtor, a maneira mais comum de instanciar um Task objeto e iniciar uma tarefa é chamando o método estático TaskFactory.StartNew(Action<Object>, Object, TaskCreationOptions) . A única vantagem oferecida por esse construtor é que ele permite que a instanciação de objeto seja separada da invocação de tarefa.

Aplica-se a

.NET 9 e outras versões
Produto Versões
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

Task(Action<Object>, Object, CancellationToken, TaskCreationOptions)

Origem:
Task.cs
Origem:
Task.cs
Origem:
Task.cs

Inicializa um novo Task com a ação, o estado e as opções especificados.

public Task (Action<object> action, object state, System.Threading.CancellationToken cancellationToken, System.Threading.Tasks.TaskCreationOptions creationOptions);
public Task (Action<object?> action, object? state, System.Threading.CancellationToken cancellationToken, System.Threading.Tasks.TaskCreationOptions creationOptions);

Parâmetros

action
Action<Object>

O delegado que representa o código a ser executado na tarefa.

state
Object

Um objeto que representa dados a serem usados pela ação.

cancellationToken
CancellationToken

O CancellationToken que a nova tarefa observará.

creationOptions
TaskCreationOptions

O TaskCreationOptions usado para personalizar o comportamento da tarefa.

Exceções

O CancellationTokenSource que criou cancellationToken já foi descartado.

O argumento action é nulo.

O argumento creationOptions especifica um valor inválido para TaskCreationOptions.

Comentários

Em vez de chamar esse construtor, a maneira mais comum de instanciar um Task objeto e iniciar uma tarefa é chamando o método estático TaskFactory.StartNew(Action<Object>, Object, CancellationToken, TaskCreationOptions, TaskScheduler) . A única vantagem oferecida por esse construtor é que ele permite que a instanciação de objeto seja separada da invocação de tarefa.

Aplica-se a

.NET 9 e outras versões
Produto Versões
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0