Task.Factory Vlastnost
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Poskytuje přístup k metodám továrny pro vytváření a konfiguraci Task a konfiguraci instancí 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
Hodnota vlastnosti
Objekt továrny, který může vytvářet různé objekty Task a Task<TResult> objekty.
Poznámky
Tato vlastnost vrátí výchozí instanci třídy, která je identická s instancí TaskFactory vytvořenou voláním konstruktoru bez TaskFactory.TaskFactory() parametrů. Má následující hodnoty vlastností:
Nejběžnějším použitím této vlastnosti je vytvoření a spuštění nového úkolu v jednom volání TaskFactory.StartNew metody.
Poznámka:
Počínaje rozhraním .NET Framework 4.5 Task.Run poskytuje metoda nejjednodušší způsob, jak vytvořit Task objekt s výchozími konfiguračními hodnotami.
Následující příklad používá statickou Factory vlastnost k provedení dvou volání TaskFactory.StartNew metody. První naplní pole názvy souborů v adresáři MyDocuments uživatele, zatímco druhý naplní pole názvy podadresářů adresáře MyDocuments uživatele. Potom zavolá metodu TaskFactory.ContinueWhenAll(Task[], Action<Task[]>) , která zobrazí informace o počtu souborů a adresářů ve dvou polích po dokončení provádění prvních dvou úkolů.
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