共用方式為


Task.Factory 屬性

定義

提供建立與設定 Task 的工廠方法及 Task<TResult> 實例存取。

public:
 static property System::Threading::Tasks::TaskFactory ^ Factory { System::Threading::Tasks::TaskFactory ^ get(); };
public static System.Threading.Tasks.TaskFactory Factory { get; }
static member Factory : System.Threading.Tasks.TaskFactory
Public Shared ReadOnly Property Factory As TaskFactory

屬性值

一個可以創造各種 TaskTask<TResult> 物件的工廠物件。

備註

此屬性會回傳一個預設的類別實例,該實例 TaskFactory 與呼叫無 TaskFactory.TaskFactory() 參數建構子所建立的實例相同。 其性質價值如下:

房產 價值
TaskFactory.CancellationToken CancellationToken.None
TaskFactory.ContinuationOptions TaskContinuationOptions.None
TaskFactory.CreationOptions TaskCreationOptions.None
TaskFactory.Scheduler nullTaskScheduler.Current

此特性最常見的用途是在一次呼叫 TaskFactory.StartNew 方法內建立並啟動新任務。

備註

從 .NET Framework 4.5 開始,此 Task.Run 方法提供了建立 Task 預設設定值物件的最簡單方法。

以下範例使用 static Factory 屬性來呼叫該 TaskFactory.StartNew 方法兩次。 第一個會填充一個陣列,包含使用者 MyDocuments 目錄中檔案名稱,而第二個則是填入一個陣列,包含使用者 MyDocuments 目錄子目錄的名稱。 接著呼叫該 TaskFactory.ContinueWhenAll(Task[], Action<Task[]>) 方法,顯示兩個陣列中檔案與目錄數量的資訊,前兩個任務執行完成後。

using System;
using System.IO;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      Task[] tasks = new Task[2];
      String[] files = null;
      String[] dirs = null;
      String docsDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

      tasks[0] = Task.Factory.StartNew( () => files = Directory.GetFiles(docsDirectory));
      tasks[1] = Task.Factory.StartNew( () => dirs = Directory.GetDirectories(docsDirectory));

      Task.Factory.ContinueWhenAll(tasks, completedTasks => {
                                             Console.WriteLine("{0} contains: ", docsDirectory);
                                             Console.WriteLine("   {0} subdirectories", dirs.Length);
                                             Console.WriteLine("   {0} files", files.Length);
                                          } );
   }
}
// The example displays output like the following:
//       C:\Users\<username>\Documents contains:
//          24 subdirectories
//          16 files
open System
open System.IO
open System.Threading.Tasks

let mutable files = Unchecked.defaultof<string[]>
let mutable dirs = Unchecked.defaultof<string[]>
let docsDirectory = Environment.GetFolderPath Environment.SpecialFolder.MyDocuments

let tasks =
    [| Task.Factory.StartNew(fun () -> files <- Directory.GetFiles docsDirectory)
       Task.Factory.StartNew(fun () -> dirs <- Directory.GetDirectories docsDirectory) |]

Task.Factory.ContinueWhenAll(
    tasks,
    fun completedTasks ->
        printfn $"{docsDirectory} contains: "
        printfn $"   {dirs.Length} subdirectories"
        printfn $"   {files.Length} files"
)
|> ignore

// The example displays output like the following:
//       C:\Users\<username>\Documents contains:
//          24 subdirectories
//          16 files
Imports System.IO
Imports System.Threading.Tasks

Module Example
   Public Sub Main()
      Dim tasks(1) As Task
      Dim files() As String = Nothing
      Dim dirs() As String = Nothing
      Dim docsDirectory As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
      
      tasks(0) = Task.Factory.StartNew( Sub()
                                           files = Directory.GetFiles(docsDirectory)
                                        End Sub )
      tasks(1) = Task.Factory.StartNew( Sub()
                                           dirs = Directory.GetDirectories(docsDirectory)
                                        End Sub )
      Task.Factory.ContinueWhenAll(tasks, Sub(completedTasks)
                                             Console.WriteLine("{0} contains: ", docsDirectory)
                                             Console.WriteLine("   {0} subdirectories", dirs.Length)
                                             Console.WriteLine("   {0} files", files.Length)
                                          End Sub)
   End Sub
End Module
' The example displays output like the following:
'       C:\Users\<username>\Documents contains:
'          24 subdirectories
'          16 files

適用於

另請參閱