Cet article a fait l’objet d’une traduction automatique. Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez également afficher le texte anglais dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte traduit.
Traduction
Anglais

Task.Run méthode (Action)

.NET Framework (current version)
 

Date de publication : novembre 2016

Met en file d'attente le travail spécifié à exécuter dans le pool de threads et retourne un objet Task qui représente ce travail.

Espace de noms:   System.Threading.Tasks
Assembly:  mscorlib (dans mscorlib.dll)

public static Task Run(
	Action action
)

Paramètres

action
Type: System.Action

Travail à exécuter de façon asynchrone

Valeur de retour

Type: System.Threading.Tasks.Task

Tâche qui représente le travail mis en file d'attente à exécuter dans le ThreadPool.

Exception Condition
ArgumentNullException

Le paramètre action était null.

The M:System.Threading.Tasks.Task.Run(System.Action) method allows you to create and execute a task in a single method call and is a simpler alternative to the M:System.Threading.Tasks.TaskFactory.StartNew(System.Action) method. It creates a task with the following default values:

  • Its cancellation token is P:System.Threading.CancellationToken.None.

  • Its P:System.Threading.Tasks.Task.CreationOptions property value is F:System.Threading.Tasks.TaskCreationOptions.DenyChildAttach.

  • It uses the default task scheduler.

For information on handling exceptions thrown by task operations, see Exception Handling (Task Parallel Library).

The following example defines a ShowThreadInfo method that displays the P:System.Threading.Thread.ManagedThreadIdof the current thread. It is called directly from the application thread, and is called from the T:System.Action delegate passed to the M:System.Threading.Tasks.Task.Run(System.Action) method.

using System;
using System.Threading;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      ShowThreadInfo("Application");

      var t = Task.Run(() => ShowThreadInfo("Task") );
      t.Wait();
   }

   static void ShowThreadInfo(String s)
   {
      Console.WriteLine("{0} Thread ID: {1}",
                        s, Thread.CurrentThread.ManagedThreadId);
   }
}
// The example displays the following output:
//       Application thread ID: 1
//       Task thread ID: 3

The following example is similar to the previous one, except that it uses a lambda expression to define the code that the task is to execute.

using System;
using System.Threading;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      Console.WriteLine("Application thread ID: {0}",
                        Thread.CurrentThread.ManagedThreadId);
      var t = Task.Run(() => {  Console.WriteLine("Task thread ID: {0}",
                                   Thread.CurrentThread.ManagedThreadId);
                             } );
      t.Wait();
   }
}
// The example displays the following output:
//       Application thread ID: 1
//       Task thread ID: 3

The examples show that the asynchronous task executes on a different thread than the main application thread.

The call to the M:System.Threading.Tasks.Task.Wait method ensures that the task completes and displays its output before the application ends. Otherwise, it is possible that the Main method will complete before the task finishes.

The following example illustrates the M:System.Threading.Tasks.Task.Run(System.Action) method. It defines an array of directory names and starts a separate task to retrieve the file names in each directory. All tasks write the file names to a single T:System.Collections.Concurrent.ConcurrentBag`1 object. The example then calls the M:System.Threading.Tasks.Task.WaitAll(System.Threading.Tasks.Task[]) method to ensure that all tasks have completed, and then displays a count of the total number of file names written to the T:System.Collections.Concurrent.ConcurrentBag`1 object.

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

Plateforme Windows universelle
Disponible depuis 8
.NET Framework
Disponible depuis 4.5
Bibliothèque de classes portable
Pris en charge dans : plateformes .NET portables
Silverlight pour Windows Phone
Disponible depuis 8.0
Windows Phone
Disponible depuis 8.1
Retour au début
Afficher: