Task<TResult>.Factory 屬性


提供 Factory 方法的存取,這些 Factory 方法用於建立及設定 Task<TResult> 執行個體。Provides access to factory methods for creating and configuring Task<TResult> instances.

 static property System::Threading::Tasks::TaskFactory<TResult> ^ Factory { System::Threading::Tasks::TaskFactory<TResult> ^ get(); };
public static System.Threading.Tasks.TaskFactory<TResult> Factory { get; }
member this.Factory : System.Threading.Tasks.TaskFactory<'Result>
Public Shared ReadOnly Property Factory As TaskFactory(Of TResult)


Factory 物件,可以建立各種不同的 Task<TResult> 物件。A factory object that can create a variety of Task<TResult> objects.


這個屬性會傳回TaskFactory<TResult>類別的預設實例, 與呼叫無參數TaskFactory<TResult>.TaskFactory<TResult>()的函式所建立的相同。This property returns a default instance of the TaskFactory<TResult> class that is identical to the one created by calling the parameterless TaskFactory<TResult>.TaskFactory<TResult>() constructor. 它具有下列屬性值:It has the following property values:

屬性Property Value
TaskFactory<TResult>.CancellationToken CancellationToken.None
TaskFactory<TResult>.ContinuationOptions TaskContinuationOptions.None
TaskFactory<TResult>.CreationOptions TaskCreationOptions.None
TaskFactory<TResult>.Scheduler null、或TaskScheduler.Currentnull, or TaskScheduler.Current

此屬性最常見的用法是在TaskFactory<TResult>.StartNew方法的單一呼叫中建立並啟動新的工作。The most common use of this property is to create and start a new task in a single call to the TaskFactory<TResult>.StartNew method.


從開始.NET Framework 4.5.NET Framework 4.5 Task<TResult> , 方法會提供最簡單的方式來建立具有預設設定值的物件。 Task.RunStarting with the .NET Framework 4.5.NET Framework 4.5, the Task.Run method provides the easiest way to create a Task<TResult> object with default configuration values.

下列範例會使用靜態Factory屬性來對TaskFactory<TResult>.StartNew方法進行三個呼叫。The following example uses the static Factory property to make three calls to the TaskFactory<TResult>.StartNew method. 第一個會啟動Task<Int32>一個物件, 它會執行傳回1的 lambda 運算式。The first starts a Task<Int32> object, which executes a lambda expression that returns 1. 第二個啟動Task<Test>物件, 它會執行具現化新Test實例的 lambda 運算式。The second starts a Task<Test> object, which executes a lambda expression that instantiates a new Test instance. 第三個會Task<String[]>啟始物件, 它會列舉 C:\Users\Public\Pictures\Sample Pictures \ 目錄中的檔案。The third starts a Task<String[]> object, which enumerates the files in the C:\Users\Public\Pictures\Sample Pictures\ directory. (請注意, 成功執行此範例需要目錄存在, 而且它包含檔案。(Note that successful execution of the example requires that the directory exist and that it contain files.

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);

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

            return result;

        foreach (var name in task3.Result)

    class Test
        public string Name { get; set; }
        public double Number { get; set; }

Imports System.Threading.Tasks

Module Module1

    Sub Main()

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

    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
    End Sub

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