Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Propiedad Task<TResult>.Factory

 

Publicado: octubre de 2016

Proporciona acceso a patrones de diseño para crear y configurar instancias de Task<TResult>.

Espacio de nombres:   System.Threading.Tasks
Ensamblado:  mscorlib (en mscorlib.dll)

public static TaskFactory<TResult> Factory { get; }

Valor de propiedad

Type: System.Threading.Tasks.TaskFactory<TResult>

Un objeto de fábrica que puede crear una variedad de objetos Task<TResult>.

Esta propiedad devuelve una instancia predeterminada de la TaskFactory<TResult> que es idéntica a la que se crean mediante una llamada sin parámetros TaskFactory<TResult>.TaskFactory<TResult>() constructor. Tiene los siguientes valores de propiedad:

Propiedad

Valor

TaskFactory<TResult>.CancellationToken

CancellationToken.None

TaskFactory<TResult>.ContinuationOptions

TaskContinuationOptions.None

TaskFactory<TResult>.CreationOptions

TaskCreationOptions.None

TaskFactory<TResult>.Scheduler

null, o TaskScheduler.Current

El uso más común de esta propiedad es crear e iniciar una nueva tarea en una única llamada a la TaskFactory<TResult>.StartNew (método).

System_CAPS_noteNota

A partir de la .NET Framework 4.5, el Task.Run método proporciona la manera más fácil de crear un Task<TResult> objeto con valores de configuración predeterminados.

En el ejemplo siguiente se utiliza estático Factory propiedad realizar tres llamadas a la TaskFactory<TResult>.StartNew (método). Inicia la primera un Task<Int32> objeto, que se ejecuta una expresión lambda que devuelve 1. La segunda inicia un Task<Test> objeto, que se ejecuta una expresión lambda que crea una instancia de un nuevo Test instancia. El tercer inicia un Task<String[]> objeto, que enumera los archivos en el directorio de C:\Users\Public\Pictures\Sample Pictures\. (Tenga en cuenta que la ejecución correcta del ejemplo requiere que el directorio existe y que contienen archivos.

using System;
using System.Linq;
using System.Threading.Tasks;

class Program
{
    static void Main()
    {
        // Return a value type with a lambda expression
        Task<int> task1 = Task<int>.Factory.StartNew(() => 1);
        int i = task1.Result;

        // Return a named reference type with a multi-line statement lambda.
        Task<Test> task2 = Task<Test>.Factory.StartNew(() =>
        {
            string s = ".NET";
            double d = 4.0;
            return new Test { Name = s, Number = d };
        });
        Test test = task2.Result;

        // Return an array produced by a PLINQ query
        Task<string[]> task3 = Task<string[]>.Factory.StartNew(() =>
        {
            string path = @"C:\Users\Public\Pictures\Sample Pictures\";
            string[] files = System.IO.Directory.GetFiles(path);

            var result = (from file in files.AsParallel()
                          let info = new System.IO.FileInfo(file)
                          where info.Extension == ".jpg"
                          select file).ToArray();

            return result;
        });

        foreach (var name in task3.Result)
            Console.WriteLine(name);

    }
    class Test
    {
        public string Name { get; set; }
        public double Number { get; set; }

    }
}

Plataforma universal de Windows
Disponible desde 8
.NET Framework
Disponible desde 4.0
Biblioteca de clases portable
Se admite en: plataformas portátiles de .NET
Silverlight
Disponible desde 5.0
Windows Phone Silverlight
Disponible desde 8.0
Windows Phone
Disponible desde 8.1
Volver al principio
Mostrar: