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

Definición

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

C#
public static System.Threading.Tasks.Task<TResult> FromResult<TResult> (TResult result);

Parámetros de tipo

TResult

Tipo de resultado devuelto por la tarea.

Parámetros

result
TResult

El resultado que se va a almacenar en la tarea completada.

Devoluciones

Task<TResult>

Tarea completada correctamente.

Ejemplos

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 argumento de línea de comandos. En lugar de ejecutar una ruta de acceso de código más larga que crea una instancia de un FileStream objeto y recupera el valor de su FileStream.Length propiedad para cada archivo del directorio, el ejemplo simplemente llama al FromResult método para crear una tarea cuya Task<TResult>.Result propiedad es cero (0) si un directorio no tiene archivos.

C#
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

Comentarios

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

Para crear un Task objeto que no devuelva un valor, recupere el Task objeto de la CompletedTask propiedad .

A partir de .NET 6, para algunos T tipos y algunos valores de resultado, este método puede devolver un objeto singleton almacenado en caché en lugar de asignar un nuevo objeto.

Se aplica a

Producto Versiones
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.NET Framework 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

Consulte también