Vous êtes actuellement hors ligne, en attente de reconnexion à Internet.

RunContinuationsAsynchronously n'est pas exécuté en mode asynchrone continuations

IMPORTANT : Cet article est issu d'une traduction automatique réalisée par un logiciel Microsoft et non par un traducteur professionnel. Cette traduction automatique a pu aussi être révisée par la communauté Microsoft grâce à la technologie Community Translation Framework (CTF). Pour en savoir plus sur cette technologie, veuillez consulter la page http://support.microsoft.com/gp/machine-translation-corrections/fr. Microsoft vous propose en effet des articles traduits par des professionnels, des articles issus de traductions automatiques et des articles issus de traductions automatiques révisées par la communauté Microsoft, de manière à ce que vous ayez accès à tous les articles de notre Base de connaissances dans votre langue. Il est important de noter que les articles issus de la traduction automatique, y compris ceux révisés par la communauté Microsoft, peuvent contenir des erreurs de vocabulaire, de syntaxe ou de grammaire. Microsoft ne pourra être tenu responsable des imprécisions, erreurs, ainsi que de tout dommage résultant d’une traduction incorrecte du contenu ou de son utilisation par les clients.

La version anglaise de cet article est la suivante: 3118695
Symptômes
Le point 4.6 de.NET Framework ajouté une nouvelle valeur de type enum, RunContinuationsAsynchronously, aux énumérations TaskCompletionSource et TaskCreationOptions. Cette valeur impose les tâches à exécuter de façon asynchrone, et cela permet d'éviter les situations de blocage. Toutefois, un problème a été découvert dans lequel, pour certains types spécifiques de continuations (en particulier lorsque les continuations créez desTask.WhenAll, Task.WhenAnyou TaskExtensions.Unwrap), l'option est ignorée. Par conséquent, les continuations peuvent toujours exécuter simultanément.

L'exemple suivant illustre le problème. Si la valeur de RunContinuationsAsynchronouslyont été fonctionne correctement, le thread de deux ID qui sont imprimés jamais serait la même, étant donné que la continuation serait toujours être planifiée sur différents threads.

using System;using System.Threading;using System.Threading.Tasks; class Program{    static void Main()    {        var mres = new ManualResetEventSlim();         Console.WriteLine(Environment.CurrentManagedThreadId);         var tcs = new TaskCompletionSource<bool>(TaskCreationOptions.RunContinuationsAsynchronously);         var t = Task.WhenAll(tcs.Task);         t.ContinueWith(delegate        {            Console.WriteLine(Environment.CurrentManagedThreadId);            mres.Set();        }, TaskContinuationOptions.ExecuteSynchronously);         tcs.SetResult(true);        mres.Wait();    }}

Résolution
Il n'existe actuellement aucune solution de contournement pour ce problème. L'équipe Microsoft.NET Framework travaillant sur une solution à inclure dans une future mise à jour.


Propriétés

ID d'article : 3118695 - Dernière mise à jour : 11/24/2015 18:14:00 - Révision : 1.0

Microsoft .NET Framework 4.6.1

  • kbsurveynew kbexpertiseadvanced kbtshoot kbmt KB3118695 KbMtfr
Commentaires
e("