Task.Factory Propriedade
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Fornece acesso a métodos de fábrica para criar e configurar Task instâncias 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
Valor de Propriedade
Um objeto de fábrica que pode criar uma variedade de Task objetos Task<TResult> .
Observações
Esta propriedade devolve uma instância padrão da TaskFactory classe que é idêntica à criada ao chamar o construtor sem TaskFactory.TaskFactory() parâmetros. Tem os seguintes valores de propriedade:
O uso mais comum desta propriedade é criar e iniciar uma nova tarefa numa única chamada ao TaskFactory.StartNew método.
Note
Começando com .NET Framework 4.5, o método Task.Run fornece a forma mais fácil de criar um objeto Task com valores de configuração padrão.
O exemplo seguinte usa a propriedade estática Factory para fazer duas chamadas ao TaskFactory.StartNew método. O primeiro preenche um array com os nomes dos ficheiros no diretório MyDocuments do utilizador, enquanto o segundo preenche um array com os nomes dos subdiretórios do diretório MyDocuments do utilizador. Depois chama o TaskFactory.ContinueWhenAll(Task[], Action<Task[]>) método, que mostra informação sobre o número de ficheiros e diretórios nos dois arrays após a execução das duas primeiras tarefas.
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