Cet article a fait l’objet d’une traduction automatique. Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez également afficher le texte anglais dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte traduit.
Traduction
Anglais

Task.FromResult<TResult> méthode (TResult)

.NET Framework (current version)
 

Date de publication : novembre 2016

Crée une Task<TResult> qui s'est terminée correctement avec le résultat spécifié.

Espace de noms:   System.Threading.Tasks
Assembly:  mscorlib (dans mscorlib.dll)

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

Paramètres

result
Type: TResult

Résultat à enregistrer dans la tâche terminée.

Valeur de retour

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

Tâche terminée avec succès.

Paramètres de type

TResult

Type du résultat retourné par la tâche.

Cette méthode crée un Task<TResult> dont Task<TResult>.Result propriété result et dont Status propriété est TaskStatus.RanToCompletion. La méthode est couramment utilisée lorsque la valeur de retour d’une tâche est appelée immédiatement sans exécuter un plus long chemin d’accès du code. Cet exemple en fournit une illustration.

Pour créer un objet de tâche qui ne retourne pas de valeur, récupérer l’objet de tâche à partir de la CompletedTask propriété.

L’exemple suivant est un utilitaire de ligne de commande qui calcule le nombre d’octets dans les fichiers dans chaque annuaire dont le nom est passé comme argument de ligne de commande. Au lieu d’exécuter un plus long chemin de code qui instancie un FileStream de l’objet et récupère la valeur de son FileStream.Length propriété pour chaque fichier dans le répertoire, l’exemple appelle simplement la FromResult<TResult> méthode pour créer une tâche dont Task<TResult>.Result propriété est zéro (0) si un répertoire ne comporte aucun fichier.

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

Plateforme Windows universelle
Disponible depuis 8
.NET Framework
Disponible depuis 4.5
Bibliothèque de classes portable
Pris en charge dans : plateformes .NET portables
Silverlight pour Windows Phone
Disponible depuis 8.0
Windows Phone
Disponible depuis 8.1
Retour au début
Afficher: