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:

プロパティ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 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.


以降では、既定の構成値を使用してオブジェクトTask<TResult>を作成するための最も簡単な方法が、メソッドによって提供されています。Task.Run .NET Framework 4.5.NET Framework 4.5Starting 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. 最初のは、 Task<Int32>オブジェクトを開始します。これにより、1を返すラムダ式が実行されます。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番目の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