Task.Factory 屬性
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
提供 Factory 方法的存取,這些 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; }
member this.Factory : System.Threading.Tasks.TaskFactory
Public Shared ReadOnly Property Factory As TaskFactory
屬性值
Factory 物件,可以建立各種不同的 Task 和 Task<TResult> 物件。
備註
這個屬性會傳回類別的預設實例,這個實例 TaskFactory 與呼叫無 TaskFactory.TaskFactory() 參數建構函式所建立的實例相同。 它有下列屬性值:
這個屬性最常見的用法是在方法的單一呼叫 TaskFactory.StartNew 中建立和啟動新工作。
下列範例會使用靜態 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