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

Método Task.FromResult<TResult>(TResult)

.NET Framework (current version)
 

Publicado: octubre de 2016

Crea un objeto Task<TResult> que se ha completado correctamente con el resultado especificado.

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

public static Task<TResult> FromResult<TResult>(
	TResult result
)

Parámetros

result
Type: TResult

Resultado que se va a almacenar en la tarea completada.

Valor devuelto

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

La tarea que finalizó correctamente.

Parámetros de tipo

TResult

Tipo de resultado devuelto por la tarea.

Este método crea un Task<TResult> cuyo objeto Task<TResult>.Result propiedad es result y cuya Status propiedad es TaskStatus.RanToCompletion. El método se utiliza normalmente cuando el valor devuelto de una tarea se conoce inmediatamente sin ejecutar una ruta de acceso de código más. En este ejemplo se ilustra.

Para crear un objeto de tarea que no devuelve un valor, se recupera el objeto de tarea de la CompletedTask propiedad.

El ejemplo siguiente es una utilidad de línea de comandos que calcula el número de bytes de los archivos de cada directorio cuyo nombre se pasa como un argumento de línea de comandos. En lugar de ejecutar una ruta más larga de código que crea una instancia de un FileStream de objetos y recupera el valor de su FileStream.Length el ejemplo simplemente llama a la propiedad de cada archivo en el directorio, la FromResult<TResult> método para crear una tarea cuya Task<TResult>.Result propiedad es cero (0) si no hay archivos en un directorio.

using System;
using System.Collections.Generic;
using System.IO;
using System.Threading;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      string[] args = Environment.GetCommandLineArgs();
      if (args.Length > 1) {
         List<Task<long>> tasks = new List<Task<long>>();
         for (int ctr = 1; ctr < args.Length; ctr++)
            tasks.Add(GetFileLengthsAsync(args[ctr]));

         try {
            Task.WaitAll(tasks.ToArray());
         }
         // Ignore exceptions here.
         catch (AggregateException) {}

         for (int ctr = 0 ; ctr < tasks.Count; ctr++) {
            if (tasks[ctr].Status == TaskStatus.Faulted)
               Console.WriteLine("{0} does not exist", args[ctr + 1]);
            else
               Console.WriteLine("{0:N0} bytes in files in '{1}'",
                                 tasks[ctr].Result, args[ctr + 1]);
         }
      }
      else {
         Console.WriteLine("Syntax error: Include one or more file paths.");
      }
   }

   private static Task<long> GetFileLengthsAsync(string filePath)
   {
      if (! Directory.Exists(filePath)) {
         return Task.FromException<long>(
                     new DirectoryNotFoundException("Invalid directory name."));
      }
      else {
         string[] files = Directory.GetFiles(filePath);
         if (files.Length == 0)
            return Task.FromResult(0L);
         else
            return Task.Run( () => { long total = 0;
                                     Parallel.ForEach(files, (fileName) => {
                                                 var fs = new FileStream(fileName, FileMode.Open,
                                                                         FileAccess.Read, FileShare.ReadWrite,
                                                                         256, true);
                                                 long length = fs.Length;
                                                 Interlocked.Add(ref total, length);
                                                 fs.Close(); } );
                                     return total;
                                   } );
      }
   }
}
// When launched with the following command line arguments:
//      subdir . newsubdir
// the example displays output like the following:
//       0 bytes in files in 'subdir'
//       2,059 bytes in files in '.'
//       newsubdir does not exist

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