AsyncStateMachineAttribute Classe
TOC
Réduire la table des matières
Développer la table des matières
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

AsyncStateMachineAttribute, classe

.NET Framework (current version)
 

Indique si une méthode est marquée avec soit le Async (Visual Basic) ou async (référence C#) modificateur.

Espace de noms:   System.Runtime.CompilerServices
Assembly:  mscorlib (dans mscorlib.dll)

System.Object
  System.Attribute
    System.Runtime.CompilerServices.StateMachineAttribute
      System.Runtime.CompilerServices.AsyncStateMachineAttribute

[SerializableAttribute]
[AttributeUsageAttribute(AttributeTargets.Method, Inherited = false, 
	AllowMultiple = false)]
public sealed class AsyncStateMachineAttribute : StateMachineAttribute

NomDescription
System_CAPS_pubmethodAsyncStateMachineAttribute(Type)

Initialise une nouvelle instance de la classe AsyncStateMachineAttribute.

NomDescription
System_CAPS_pubpropertyStateMachineType

Retourne l'objet de type pour le type de machine d'état sous-jacent qui a été généré par le compilateur pour implémenter la méthode de machine d'état.(Hérité de StateMachineAttribute.)

System_CAPS_pubpropertyTypeId

Lors de l'implémentation dans une classe dérivée, obtient un identificateur unique pour l'objet Attribute.(Hérité de Attribute.)

NomDescription
System_CAPS_pubmethodEquals(Object)

Cette API prend en charge l'infrastructure produit et n'est pas destinée à être utilisée directement à partir de votre code. Retourne une valeur qui indique si cette instance est égale à un objet spécifié.(Hérité de Attribute.)

System_CAPS_pubmethodGetHashCode()

Retourne le code de hachage de cette instance.(Hérité de Attribute.)

System_CAPS_pubmethodGetType()

Obtient le Type de l'instance actuelle.(Hérité de Object.)

System_CAPS_pubmethodIsDefaultAttribute()

En cas de substitution dans une classe dérivée, indique si la valeur de cette instance est la valeur par défaut pour la classe dérivée.(Hérité de Attribute.)

System_CAPS_pubmethodMatch(Object)

En cas de substitution dans une classe dérivée, retourne une valeur qui indique si cette instance équivaut à un objet spécifié.(Hérité de Attribute.)

System_CAPS_pubmethodToString()

Retourne une chaîne qui représente l'objet actuel.(Hérité de Object.)

NomDescription
System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Mappe un jeu de noms avec un jeu correspondant d'identificateurs de dispatch.(Hérité de Attribute.)

System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Récupère les informations de type pour un objet, qui peuvent être utilisées pour obtenir les informations de type d'une interface.(Hérité de Attribute.)

System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.GetTypeInfoCount(UInt32)

Récupère le nombre d'interfaces d'informations de type fourni par un objet (0 ou 1).(Hérité de Attribute.)

System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Fournit l'accès aux propriétés et aux méthodes exposées par un objet.(Hérité de Attribute.)

Vous ne devez pas appliquer le AsyncStateMachine attribut aux méthodes dans votre code. Pour les méthodes avec le modificateur async, le compilateur appliquera la AsyncStateMachine attribut dans le compilateur émet le langage intermédiaire.

Lorsqu'une méthode (MethodName) a l'opération asynchrone ou modificateur async, le compilateur émet le langage intermédiaire qui inclut une structure de machine d'état. Cette structure contient le code dans la méthode. Qu'IL contient également une méthode stub (MethodName) qui appelle l'ordinateur d'état. Le compilateur ajoute les AsyncStateMachine d'attribut à la méthode stub afin que les outils peuvent identifier l'ordinateur d'état correspondant. Détails du langage intermédiaire émis peuvent changer dans les futures versions des compilateurs.

Pour plus d'informations sur la fonctionnalité Async, consultez Programmation asynchrone avec Async et Await (C# et Visual Basic).

Comme le montre l'exemple suivant, vous pouvez déterminer si une méthode est marquée avec Async (Visual Basic) ou async (référence C#) modificateur. Dans l'exemple, IsAsyncMethod effectue les étapes suivantes :

  • Obtient un MethodInfo objet pour le nom de la méthode à l'aide de Type.GetMethod.

  • Obtient un Type objet pour l'attribut à l'aide de GetType Operator (Visual Basic) ou typeof (référence C#).

  • Obtient un objet d'attribut pour le type de méthode et l'attribut à l'aide de MethodInfo.GetCustomAttribute. Si GetCustomAttribute retourne Nothing (Visual Basic) ou null (c#), la méthode ne contient pas l'attribut.

using System;
using System.Collections.Generic;
using System.Reflection;
using System.Threading.Tasks;
using System.Runtime.CompilerServices;

namespace ConsoleApplication1
{

    // This class is used by the code below to discover method attributes.
    public class TheClass
    {
        public async Task<int> AsyncMethod()
        {
            await Task.Delay(5);
            return 1;
        }

        public int RegularMethod()
        {
            return 0;
        }
    }

    class Program
    {
        private static bool IsAsyncMethod(Type classType, string methodName)
        {
            // Obtain the method with the specified name.
            MethodInfo method = classType.GetMethod(methodName);

            Type attType = typeof(AsyncStateMachineAttribute);

            // Obtain the custom attribute for the method.
            // The value returned contains the StateMachineType property.
            // Null is returned if the attribute isn't present for the method.
            var attrib = (AsyncStateMachineAttribute)method.GetCustomAttribute(attType);

            return (attrib != null);
        }

        private static void ShowResult(Type classType, string methodName)
        {
            Console.Write((methodName + ": ").PadRight(16));

            if (IsAsyncMethod(classType, methodName))
                Console.WriteLine("Async method");
            else
                Console.WriteLine("Regular method");
        }

        static void Main(string[] args)
        {
            ShowResult(classType: typeof(TheClass), methodName: "AsyncMethod");
            ShowResult(classType: typeof(TheClass), methodName: "RegularMethod");

            // Note: The IteratorStateMachineAttribute applies to Visual Basic methods
            // but not C# methods.

            Console.ReadKey();
        }

        // Output:
        //   AsyncMethod:    Async method
        //   RegularMethod:  Regular method
    }
}

Universal Windows Platform
Disponible depuis 8
.NET Framework
Disponible depuis 4.5
Portable Class Library
Pris en charge dans : portable .NET platforms
Windows Phone Silverlight
Disponible depuis 8.0
Windows Phone
Disponible depuis 8.1

Tous les membres statiques (Shared en Visual Basic) publics de ce type sont thread-safe. Il n'est pas garanti que les membres d'instance soient thread-safe.

Retour au début
Afficher:
© 2016 Microsoft