Task.Run Method (Action)

.NET Framework 4.6 and 4.5

Queues the specified work to run on the thread pool and returns a Task object that represents that work.

Namespace:   System.Threading.Tasks
Assembly:  mscorlib (in mscorlib.dll)

public static Task Run(
	Action action


Type: System.Action

The work to execute asynchronously

Return Value

Type: System.Threading.Tasks.Task

A task that represents the work queued to execute in the ThreadPool.

Exception Condition

The action parameter was null.

The Run method allows you to create and execute a task in a single method call and is a simpler alternative to the StartNew method. It creates a task with the following default values:

The following example displays the ManagedThreadId property of the application thread. It then calls the Run(Action) method to launch a task that displays the task's ManagedThreadId property.

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

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

The example shows that the asynchronous task executes on a different thread than the main application thread.

The call to the 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 Run(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 ConcurrentBag<T> object. The example then calls the WaitAll(Task[]) method to ensure that all tasks have completed, and then displays a count of the total number of file names written to the ConcurrentBag<T> 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); }  );
      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
Available since 4.5
.NET Framework
Available since 4.5
Portable Class Library
Supported in: portable .NET platforms
Windows Phone Silverlight
Available since 8.0
Windows Phone
Available since 8.1
Return to top
Was this page helpful?
(1500 characters remaining)
Thank you for your feedback
© 2015 Microsoft