Export (0) Print
Expand All

Task.FromResult(Of TResult) Method

.NET Framework 4.6 and 4.5

Creates a Task(Of TResult) that's completed successfully with the specified result.

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

'Declaration
Public Shared Function FromResult(Of TResult) ( _
	result As TResult _
) As Task(Of TResult)

Type Parameters

TResult

The type of the result returned by the task.

Parameters

result
Type: TResult

The result to store into the completed task.

Return Value

Type: System.Threading.Tasks.Task(Of TResult)
The successfully completed task.

This method creates a Task(Of TResult) object whose Task(Of TResult).Result property is result and whose Status property is TaskStatus.RanToCompletion. The method is commonly used when the return value of a task is immediately known without executing a longer code path. The example provides an illustration.

To create a Task object that does not return a value, retrieve the Task object from the CompletedTask property.

The following example is a command-line utility that calculates the number of bytes in the files in each directory whose name is passed as a command-line argument. Rather than executing a longer code path that instantiates a FileStream object and retrieves the value of its FileStream.Length property for each file in the directory, the example simply calls the FromResult(Of TResult) method to create a task whose Task(Of TResult).Result property is zero (0) if a directory has no files.

Imports System.Collections.Generic
Imports System.IO
Imports System.Threading
Imports System.Threading.Tasks

Module Example
   Public Sub Main()
      Dim args() As String = Environment.GetCommandLineArgs()
      If args.Length > 1 Then 
         Dim tasks As New List(Of Task(Of Long))
         For ctr = 1 To args.Length - 1
            tasks.Add(GetFileLengthsAsync(args(ctr)))
         Next 
         Try
            Task.WaitAll(tasks.ToArray())
         ' Ignore exceptions here. 
         Catch e As AggregateException
         End Try 

         For ctr As Integer = 0 To tasks.Count - 1
            If tasks(ctr).Status = TaskStatus.Faulted Then
               Console.WriteLine("{0} does not exist", args(ctr + 1))
            Else
               Console.WriteLine("{0:N0} bytes in files in '{1}'",
                                 tasks(ctr).Result, args(ctr + 1))
            End If 
         Next 
      Else
         Console.WriteLine("Syntax error: Include one or more file paths.")
      End If 
   End Sub 

   Private Function GetFileLengthsAsync(filePath As String) As Task(Of Long)
      If Not Directory.Exists(filePath) Then 
         Return Task.FromException(Of Long)(
                     New DirectoryNotFoundException("Invalid directory name."))
      Else 
         Dim files As String() = Directory.GetFiles(filePath)
         If filePath.Length = 0 Then 
            Return Task.FromResult(0L)
         Else 
            Return Task.Run( Function()
                                Dim total As Long = 0
                                Dim lockObj As New Object
                                Parallel.ForEach(files, Sub(fileName)
                                                           Dim fs As New FileStream(fileName, FileMode.Open,
                                                                     FileAccess.Read, FileShare.ReadWrite,
                                                                     256, True)
                                                           Dim length As Long = fs.Length
                                                           total = Interlocked.Add(total, length)
                                                           fs.Close()
                                                        End Sub)
                                Return total
                             End Function )
         End If 
      End If 
   End Function 
End Module 
' When launched with the following command line arguments: 
'      subdir . newsubdir 
' the example displays output like the following: 
'       0 bytes in files in 'subdir' 
'       2,059 bytes in files in '.' 
'       newsubdir does not exist

.NET Framework

Supported in: 4.6, 4.5

Supported in: Windows Phone 8.1

Supported in: Windows Phone Silverlight 8.1

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