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>.Result

 

Publicado: octubre de 2016

Obtiene el valor de resultado de esta Task<TResult>.

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

public TResult Result { get; }

Valor de propiedad

Type: TResult

El valor resultante de esta Task<TResult>, que es el mismo que el parámetro de tipo de la tarea.

Exception Condition
AggregateException

Se canceló la tarea. El AggregateException.InnerExceptions colección contiene un TaskCanceledException objeto.

-o-

Se produjo una excepción durante la ejecución de la tarea. El AggregateException.InnerExceptions colección contiene información acerca de la excepción o excepciones.

Obtener acceso a del descriptor de acceso get bloquea el subproceso que realiza la llamada hasta que la operación asincrónica se completa; es equivalente a llamar a la Wait (método).

Una vez que el resultado de una operación está disponible, se almacena y se devuelve inmediatamente en llamadas posteriores a la Result propiedad. Tenga en cuenta que, si se produjo una excepción durante la operación de la tarea, o si se ha cancelado la tarea, el Result propiedad no devuelve un valor. En su lugar, intenta tener acceso a la propiedad valor produce un AggregateException excepción.

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. Si el directorio contiene archivos, se ejecuta una expresión lambda que crea una instancia de un FileStream objeto para cada archivo en el directorio y recupera el valor de su FileStream.Length propiedad. Si un directorio no contiene archivos, simplemente llama a la FromResult<TResult> método para crear una tarea cuya Task<TResult>.Result propiedad es cero (0). Cuando finalicen las tareas, el número total de bytes en archivos de todo un directorio está disponible en la Result propiedad.

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.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: