TaskFactory 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
提供建立和排程 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 的預設工作排程器。 |
方法
適用於
執行緒安全性
的所有公用和受保護成員 TaskFactory 都是安全線程,而且可以從多個執行緒同時使用。