Note

Access to this page requires authorization. You can try signing in or .

Access to this page requires authorization. You can try .

How to: Return a Value from a Task

This example shows how to use the System.Threading.Tasks.Task<TResult> class to return a value from the Result property. To use this example, you must ensure that the C:\Users\Public\Pictures\Sample Pictures directory exists and that it contains files.

Example

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

class Program
{
 static void Main()
 {
 // Return a value type with a lambda expression
 Task<int> task1 = Task<int>.Factory.StartNew(() => 1);
 int i = task1.Result;

 // Return a named reference type with a multi-line statement lambda.
 Task<Test> task2 = Task<Test>.Factory.StartNew(() =>
 {
 string s = ".NET";
 double d = 4.0;
 return new Test { Name = s, Number = d };
 });
 Test test = task2.Result;

 // Return an array produced by a PLINQ query
 Task<string[]> task3 = Task<string[]>.Factory.StartNew(() =>
 {
 string path = @"C:\Users\Public\Pictures\Sample Pictures\";
 string[] files = System.IO.Directory.GetFiles(path);

 string[] result = (from file in files.AsParallel()
 let info = new System.IO.FileInfo(file)
 where info.Extension == ".jpg"
 select file).ToArray();

 return result;
 });

 foreach (string name in task3.Result)
 Console.WriteLine(name);
 }
 class Test
 {
 public string Name { get; set; }
 public double Number { get; set; }
 }
}
Imports System.Threading.Tasks

Module Module1

 Sub Main()
 ReturnAValue()

 Console.WriteLine("Press any key to exit.")
 Console.ReadKey()

 End Sub

 Sub ReturnAValue()

 ' Return a value type with a lambda expression
 Dim task1 = Task(Of Integer).Factory.StartNew(Function() 1)
 Dim i As Integer = task1.Result

 ' Return a named reference type with a multi-line statement lambda.
 Dim task2 As Task(Of Test) = Task.Factory.StartNew(Function()
 Dim s As String = ".NET"
 Dim d As Integer = 4
 Return New Test With {.Name = s, .Number = d}
 End Function)

 Dim myTest As Test = task2.Result
 Console.WriteLine(myTest.Name & ": " & myTest.Number)

 ' Return an array produced by a PLINQ query.
 Dim task3 As Task(Of String()) = Task(Of String()).Factory.StartNew(Function()

 Dim path = "C:\Users\Public\Pictures\Sample Pictures\"
 Dim files = System.IO.Directory.GetFiles(path)

 Dim result = (From file In files.AsParallel()
 Let info = New System.IO.FileInfo(file)
 Where info.Extension = ".jpg"
 Select file).ToArray()
 Return result
 End Function)

 For Each name As String In task3.Result
 Console.WriteLine(name)
 Next
 End Sub

 Class Test
 Public Name As String
 Public Number As Double
 End Class
End Module

The Result property blocks the calling thread until the task finishes.

To see how to pass the result of a System.Threading.Tasks.Task<TResult> class to a continuation task, see Chaining Tasks by Using Continuation Tasks.

See also


Feedback

Was this page helpful?

Additional resources