Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
Export (0) Print
Expand All

Task.Run Method (Action)

.NET Framework 4.6 and 4.5

Queues the specified work to run on the ThreadPool and returns a task handle for that work.

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

public static Task Run(
	Action action
)

Parameters

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.

ExceptionCondition
ArgumentNullException

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}",
                        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 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); }  );
         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

.NET Framework

Supported in: 4.6, 4.5

.NET for Windows Phone apps

Supported in: Windows Phone 8.1, Windows Phone Silverlight 8.1, Windows Phone Silverlight 8
Show:
© 2015 Microsoft