Task.Factory Propiedad
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Proporciona acceso a patrones de diseño para crear y configurar instancias de Task y 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
Valor de propiedad
Un objeto de fábrica que puede crear una variedad de objetos Task y Task<TResult>.
Comentarios
Esta propiedad devuelve una instancia predeterminada de la TaskFactory clase que es idéntica a la creada llamando al constructor sin TaskFactory.TaskFactory() parámetros. Tiene los siguientes valores de propiedad:
El uso más común de esta propiedad es crear e iniciar una nueva tarea en una sola llamada al TaskFactory.StartNew método .
Nota
A partir de .NET Framework 4.5, el Task.Run método proporciona la manera más fácil de crear un Task objeto con valores de configuración predeterminados.
En el ejemplo siguiente se usa la propiedad estática Factory para realizar dos llamadas al TaskFactory.StartNew método . La primera rellena una matriz con los nombres de los archivos en el directorio MyDocuments del usuario, mientras que el segundo rellena una matriz con los nombres de subdirectorios del directorio MyDocuments del usuario. A continuación, llama al TaskFactory.ContinueWhenAll(Task[], Action<Task[]>) método , que muestra información sobre el número de archivos y directorios en las dos matrices después de que las dos primeras tareas hayan completado la ejecución.
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