TaskFactory 類別

定義

提供建立和排程 Task 物件的支援。

public ref class TaskFactory
public class TaskFactory
type TaskFactory = class
Public Class TaskFactory
繼承
TaskFactory

範例

下列範例會使用靜態 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
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

備註

.NET 提供兩個處理站來建立和排程工作:

  • 類別 TaskFactory ,其會 Task 建立 和 Task<TResult> 物件。 您可以呼叫這個方法的多載,以建立和執行需要非預設引數的工作。

    警告

    從 .NET Framework 4.5 開始, Task.Run 此方法提供最簡單的方式,以使用預設組態值建立工作,並立即啟動。

  • 類別 TaskFactory<TResult> ,其會 Task<TResult> 建立 物件。

類別 TaskFactory 可讓您執行下列動作:

  • 建立工作,並藉由呼叫 StartNew 方法來立即啟動工作。

    警告

    從 .NET Framework 4.5 開始, Task.Run 此方法提供最簡單的方式,以使用預設組態值建立工作,並立即啟動。

  • 建立工作,此工作會在陣列中的任何一個工作完成時啟動,方法是呼叫 ContinueWhenAny 方法。

  • 建立工作,此工作會在陣列中的所有工作都完成時啟動,方法是呼叫 ContinueWhenAll 方法。

靜態 Task<TResult>.Factory 屬性會傳回預設 TaskFactory<TResult> 物件。 您也可以呼叫其中一個 TaskFactory 類別建構函式,以設定 Task 類別所建立的物件 TaskFactory 。 下列範例會設定新的 TaskFactory 物件,以建立具有指定解除標記、工作建立選項、接續選項和自訂工作排程器的工作。

using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;

class Example
{
   static CancellationTokenSource cts = new CancellationTokenSource();

   static TaskFactory factory = new TaskFactory(
      cts.Token,
      TaskCreationOptions.PreferFairness,
      TaskContinuationOptions.ExecuteSynchronously,
      new CustomScheduler());

   static void Main()
   {
      var t2 = factory.StartNew(() => DoWork());
      cts.Dispose();
   }

   static void DoWork() {/*...*/ }
}
Imports System.Collections.Generic
Imports System.Threading
Imports System.Threading.Tasks

Module Example
   Public Sub Main()
      Dim cts As New CancellationTokenSource()
      Dim factory As New TaskFactory(cts.Token,
                                     TaskCreationOptions.PreferFairness,
                                     TaskContinuationOptions.ExecuteSynchronously,
                                     New CustomScheduler())

      Dim t2 = factory.StartNew(Sub() DoWork())
      cts.Dispose()
   End Sub

   Sub DoWork()
      ' ...
   End Sub
End Module

在大部分情況下,您不需要具現化新的 TaskFactory 實例。 相反地 Task.Factory ,您可以使用 屬性,這個屬性會傳回使用預設值的 Factory 物件。 然後,您可以呼叫其方法來啟動新的工作或定義工作接續。 如需圖例,請參閱範例。

建構函式

TaskFactory()

使用預設組態,初始化 TaskFactory 執行個體。

TaskFactory(CancellationToken)

使用指定的組態,初始化 TaskFactory 執行個體。

TaskFactory(CancellationToken, TaskCreationOptions, TaskContinuationOptions, TaskScheduler)

使用指定的組態,初始化 TaskFactory 執行個體。

TaskFactory(TaskCreationOptions, TaskContinuationOptions)

使用指定的組態,初始化 TaskFactory 執行個體。

TaskFactory(TaskScheduler)

使用指定的組態,初始化 TaskFactory 執行個體。

屬性

CancellationToken

取得這個工作 Factory 的預設取消語彙基元。

ContinuationOptions

取得這個工作 Factory 的預設工作接續選項。

CreationOptions

取得這個工作 Factory 的預設工作建立選項。

Scheduler

取得這個工作 Factory 的預設工作排程器。

方法

ContinueWhenAll(Task[], Action<Task[]>)

當一組指定的工作已完成時,建立啟動的接續工作。

ContinueWhenAll(Task[], Action<Task[]>, CancellationToken)

當一組指定的工作已完成時,建立啟動的接續工作。

ContinueWhenAll(Task[], Action<Task[]>, CancellationToken, TaskContinuationOptions, TaskScheduler)

當一組指定的工作已完成時,建立啟動的接續工作。

ContinueWhenAll(Task[], Action<Task[]>, TaskContinuationOptions)

當一組指定的工作已完成時,建立啟動的接續工作。

ContinueWhenAll<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>)

當一組指定的工作已完成時,建立啟動的接續工作。

ContinueWhenAll<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>, CancellationToken)

當一組指定的工作已完成時,建立啟動的接續工作。

ContinueWhenAll<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler)

當一組指定的工作已完成時,建立啟動的接續工作。

ContinueWhenAll<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>, TaskContinuationOptions)

當一組指定的工作已完成時,建立啟動的接續工作。

ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>[]>)

當一組指定的工作已完成時,建立啟動的接續工作。

ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>[]>, CancellationToken)

當一組指定的工作已完成時,建立啟動的接續工作。

ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>[]>, CancellationToken, TaskContinuationOptions, TaskScheduler)

當一組指定的工作已完成時,建立啟動的接續工作。

ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>[]>, TaskContinuationOptions)

當一組指定的工作已完成時,建立啟動的接續工作。

ContinueWhenAll<TResult>(Task[], Func<Task[],TResult>)

當一組指定的工作已完成時,建立啟動的接續工作。

ContinueWhenAll<TResult>(Task[], Func<Task[],TResult>, CancellationToken)

當一組指定的工作已完成時,建立啟動的接續工作。

ContinueWhenAll<TResult>(Task[], Func<Task[],TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler)

當一組指定的工作已完成時,建立啟動的接續工作。

ContinueWhenAll<TResult>(Task[], Func<Task[],TResult>, TaskContinuationOptions)

當一組指定的工作已完成時,建立啟動的接續工作。

ContinueWhenAny(Task[], Action<Task>)

建立會在提供的任何一項工作完成時啟動的 Task

ContinueWhenAny(Task[], Action<Task>, CancellationToken)

建立會在提供的任何一項工作完成時啟動的 Task

ContinueWhenAny(Task[], Action<Task>, CancellationToken, TaskContinuationOptions, TaskScheduler)

建立會在提供的任何一項工作完成時啟動的 Task

ContinueWhenAny(Task[], Action<Task>, TaskContinuationOptions)

建立會在提供的任何一項工作完成時啟動的 Task

ContinueWhenAny<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>,TResult>)

建立會在提供的任何一項工作完成時啟動的 Task<TResult>

ContinueWhenAny<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>,TResult>, CancellationToken)

建立會在提供的任何一項工作完成時啟動的 Task<TResult>

ContinueWhenAny<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>,TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler)

建立會在提供的任何一項工作完成時啟動的 Task<TResult>

ContinueWhenAny<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>,TResult>, TaskContinuationOptions)

建立會在提供的任何一項工作完成時啟動的 Task<TResult>

ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>>)

建立會在提供的任何一項工作完成時啟動的 Task

ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>>, CancellationToken)

建立會在提供的任何一項工作完成時啟動的 Task

ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>>, CancellationToken, TaskContinuationOptions, TaskScheduler)

建立會在提供的任何一項工作完成時啟動的 Task

ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>>, TaskContinuationOptions)

建立會在提供的任何一項工作完成時啟動的 Task

ContinueWhenAny<TResult>(Task[], Func<Task,TResult>)

建立會在提供的任何一項工作完成時啟動的 Task<TResult>

ContinueWhenAny<TResult>(Task[], Func<Task,TResult>, CancellationToken)

建立會在提供的任何一項工作完成時啟動的 Task<TResult>

ContinueWhenAny<TResult>(Task[], Func<Task,TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler)

建立會在提供的任何一項工作完成時啟動的 Task<TResult>

ContinueWhenAny<TResult>(Task[], Func<Task,TResult>, TaskContinuationOptions)

建立會在提供的任何一項工作完成時啟動的 Task<TResult>

Equals(Object)

判斷指定的物件是否等於目前的物件。

(繼承來源 Object)
FromAsync(Func<AsyncCallback,Object,IAsyncResult>, Action<IAsyncResult>, Object)

建立 Task,表示一組符合「非同步程式設計模型」模式的開始和結束方法。

FromAsync(Func<AsyncCallback,Object,IAsyncResult>, Action<IAsyncResult>, Object, TaskCreationOptions)

建立 Task,表示一組符合「非同步程式設計模型」模式的開始和結束方法。

FromAsync(IAsyncResult, Action<IAsyncResult>)

建立 Task,這個項目會在指定的 IAsyncResult 完成時執行結束方法動作。

FromAsync(IAsyncResult, Action<IAsyncResult>, TaskCreationOptions)

建立 Task,這個項目會在指定的 IAsyncResult 完成時執行結束方法動作。

FromAsync(IAsyncResult, Action<IAsyncResult>, TaskCreationOptions, TaskScheduler)

建立 Task,這個項目會在指定的 IAsyncResult 完成時執行結束方法動作。

FromAsync<TArg1,TArg2,TArg3,TResult>(Func<TArg1,TArg2,TArg3,AsyncCallback, Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, TArg2, TArg3, Object)

建立 Task<TResult>,表示一組符合「非同步程式設計模型」模式的開始和結束方法。

FromAsync<TArg1,TArg2,TArg3,TResult>(Func<TArg1,TArg2,TArg3,AsyncCallback, Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, TArg2, TArg3, Object, TaskCreationOptions)

建立 Task<TResult>,表示一組符合「非同步程式設計模型」模式的開始和結束方法。

FromAsync<TArg1,TArg2,TArg3>(Func<TArg1,TArg2,TArg3,AsyncCallback,Object,IAsyncResult>, Action<IAsyncResult>, TArg1, TArg2, TArg3, Object)

建立 Task,表示一組符合「非同步程式設計模型」模式的開始和結束方法。

FromAsync<TArg1,TArg2,TArg3>(Func<TArg1,TArg2,TArg3,AsyncCallback, Object,IAsyncResult>, Action<IAsyncResult>, TArg1, TArg2, TArg3, Object, TaskCreationOptions)

建立 Task,表示一組符合「非同步程式設計模型」模式的開始和結束方法。

FromAsync<TArg1,TArg2,TResult>(Func<TArg1,TArg2,AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, TArg2, Object)

建立 Task<TResult>,表示一組符合「非同步程式設計模型」模式的開始和結束方法。

FromAsync<TArg1,TArg2,TResult>(Func<TArg1,TArg2,AsyncCallback, Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, TArg2, Object, TaskCreationOptions)

建立 Task<TResult>,表示一組符合「非同步程式設計模型」模式的開始和結束方法。

FromAsync<TArg1,TArg2>(Func<TArg1,TArg2,AsyncCallback,Object,IAsyncResult>, Action<IAsyncResult>, TArg1, TArg2, Object)

建立 Task,表示一組符合「非同步程式設計模型」模式的開始和結束方法。

FromAsync<TArg1,TArg2>(Func<TArg1,TArg2,AsyncCallback,Object,IAsyncResult>, Action<IAsyncResult>, TArg1, TArg2, Object, TaskCreationOptions)

建立 Task,表示一組符合「非同步程式設計模型」模式的開始和結束方法。

FromAsync<TArg1,TResult>(Func<TArg1,AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, Object)

建立 Task<TResult>,表示一組符合「非同步程式設計模型」模式的開始和結束方法。

FromAsync<TArg1,TResult>(Func<TArg1,AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, Object, TaskCreationOptions)

建立 Task<TResult>,表示一組符合「非同步程式設計模型」模式的開始和結束方法。

FromAsync<TArg1>(Func<TArg1,AsyncCallback,Object,IAsyncResult>, Action<IAsyncResult>, TArg1, Object)

建立 Task,表示一組符合「非同步程式設計模型」模式的開始和結束方法。

FromAsync<TArg1>(Func<TArg1,AsyncCallback,Object,IAsyncResult>, Action<IAsyncResult>, TArg1, Object, TaskCreationOptions)

建立 Task,表示一組符合「非同步程式設計模型」模式的開始和結束方法。

FromAsync<TResult>(Func<AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, Object)

建立 Task<TResult>,表示一組符合「非同步程式設計模型」模式的開始和結束方法。

FromAsync<TResult>(Func<AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, Object, TaskCreationOptions)

建立 Task<TResult>,表示一組符合「非同步程式設計模型」模式的開始和結束方法。

FromAsync<TResult>(IAsyncResult, Func<IAsyncResult,TResult>)

建立 Task<TResult>,當指定的 IAsyncResult 完成時會執行結束方法函式。

FromAsync<TResult>(IAsyncResult, Func<IAsyncResult,TResult>, TaskCreationOptions)

建立 Task<TResult>,當指定的 IAsyncResult 完成時會執行結束方法函式。

FromAsync<TResult>(IAsyncResult, Func<IAsyncResult,TResult>, TaskCreationOptions, TaskScheduler)

建立 Task<TResult>,當指定的 IAsyncResult 完成時會執行結束方法函式。

GetHashCode()

做為預設雜湊函式。

(繼承來源 Object)
GetType()

取得目前執行個體的 Type

(繼承來源 Object)
MemberwiseClone()

建立目前 Object 的淺層複製。

(繼承來源 Object)
StartNew(Action)

建立並啟動所指定動作委派的工作。

StartNew(Action, CancellationToken)

建立並啟動所指定動作委派和取消語彙基元的工作。

StartNew(Action, CancellationToken, TaskCreationOptions, TaskScheduler)

建立並啟動所指定動作委派、取消語彙基元、建立選項以及狀態的工作。

StartNew(Action, TaskCreationOptions)

建立並啟動所指定動作委派和建立選項的工作。

StartNew(Action<Object>, Object)

建立並啟動所指定動作委派和狀態的工作。

StartNew(Action<Object>, Object, CancellationToken)

建立並啟動所指定動作委派、狀態以及取消語彙基元的工作。

StartNew(Action<Object>, Object, CancellationToken, TaskCreationOptions, TaskScheduler)

建立並啟動所指定動作委派、狀態、取消語彙基元、建立選項以及工作排程器的工作。

StartNew(Action<Object>, Object, TaskCreationOptions)

建立並啟動所指定動作委派、狀態以及建立選項的工作。

StartNew<TResult>(Func<Object,TResult>, Object)

建立並啟動所指定函式委派其類型為 TResult 的工作。

StartNew<TResult>(Func<Object,TResult>, Object, CancellationToken)

建立並啟動所指定函式委派、狀態以及取消語彙基元其類型為 TResult 的工作。

StartNew<TResult>(Func<Object,TResult>, Object, CancellationToken, TaskCreationOptions, TaskScheduler)

建立並啟動所指定函式委派、狀態、取消語彙基元、建立選項以及工作排程器其類型為 TResult 的工作。

StartNew<TResult>(Func<Object,TResult>, Object, TaskCreationOptions)

建立並啟動所指定函式委派、狀態以及建立選項其類型為 TResult 的工作。

StartNew<TResult>(Func<TResult>)

建立並啟動所指定函式委派其類型為 TResult 的工作。

StartNew<TResult>(Func<TResult>, CancellationToken)

建立並啟動所指定函式委派和取消語彙基元其類型為 TResult 的工作。

StartNew<TResult>(Func<TResult>, CancellationToken, TaskCreationOptions, TaskScheduler)

建立並啟動所指定函式委派、取消語彙基元、建立選項以及工作排程器其類型為 TResult 的工作。

StartNew<TResult>(Func<TResult>, TaskCreationOptions)

建立並啟動所指定函式委派和建立選項其類型為 TResult 的工作。

ToString()

傳回代表目前物件的字串。

(繼承來源 Object)

適用於

執行緒安全性

的所有公用和受保護成員 TaskFactory 都是安全線程,而且可以從多個執行緒同時使用。

另請參閱