Task<TResult>.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)


さまざまな 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:

propertyProperty [値]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 メソッドの1回の呼び出しで新しいタスクを作成して開始することです。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.Run メソッドは、既定の構成値を使用して Task<TResult> オブジェクトを作成する最も簡単な方法を提供します。Starting 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 メソッドを3回呼び出します。The following example uses the static Factory property to make three calls to the TaskFactory<TResult>.StartNew method. 最初のは、1を返すラムダ式を実行する Task<Int32> オブジェクトを開始します。The first starts a Task<Int32> object, which executes a lambda expression that returns 1. 2番目のオブジェクトは、Task<Test> オブジェクトを開始し、新しい Test インスタンスをインスタンス化するラムダ式を実行します。The second starts a Task<Test> object, which executes a lambda expression that instantiates a new Test instance. 3番目のは、C:\Users\Public\Pictures\Sample Pictures \ ディレクトリ内のファイルを列挙する Task<String[]> オブジェクトを開始します。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