AsyncStateMachineAttribute AsyncStateMachineAttribute AsyncStateMachineAttribute AsyncStateMachineAttribute Class

Definice

Určuje, zda je metoda označena modifikátorem Async nebo Async .Indicates whether a method is marked with either the Async or async modifier.

public ref class AsyncStateMachineAttribute sealed : System::Runtime::CompilerServices::StateMachineAttribute
[System.AttributeUsage(System.AttributeTargets.Method, AllowMultiple=false, Inherited=false)]
[System.Serializable]
public sealed class AsyncStateMachineAttribute : System.Runtime.CompilerServices.StateMachineAttribute
type AsyncStateMachineAttribute = class
    inherit StateMachineAttribute
Public NotInheritable Class AsyncStateMachineAttribute
Inherits StateMachineAttribute
Dědičnost
AsyncStateMachineAttributeAsyncStateMachineAttributeAsyncStateMachineAttributeAsyncStateMachineAttribute
Atributy

Příklady

Jak ukazuje následující příklad, můžete určit, zda je metoda označena modifikátorem Async nebo Async .As the following example shows, you can determine whether a method is marked with Async or async modifier. V tomto příkladu IsAsyncMethod provede následující kroky:In the example, IsAsyncMethod performs the following steps:

  • Získá objekt pro název metody pomocí Type.GetMethod. MethodInfoObtains a MethodInfo object for the method name by using Type.GetMethod.

  • Získá objekt pro atribut pomocí operátoru GetType nebo typeof. TypeObtains a Type object for the attribute by using GetType Operator or typeof.

  • Získá objekt atributu pro metodu a typ atributu pomocí MethodInfo.GetCustomAttribute.Obtains an attribute object for the method and attribute type by using MethodInfo.GetCustomAttribute. Pokud GetCustomAttribute vrátí Nothing hodnotu (Visual Basic) null neboC#(), metoda neobsahuje atribut.If GetCustomAttribute returns Nothing (Visual Basic) or null (C#), the method doesn't contain the attribute.

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
    }
}

Imports System.Collections.Generic
Imports System.Reflection
Imports System.Threading.Tasks
Imports System.Runtime.CompilerServices


Module Module1

    ' This class is used by the code below to discover method attributes.
    Public Class TheClass
        Public Async Function AsyncMethod() As Task(Of Integer)
            Await Task.Delay(5)
            Return 1
        End Function

        Public Iterator Function IteratorMethod() As IEnumerable(Of Integer)
            Yield 1
            Yield 2
        End Function

        Public Function RegularMethod() As Integer
            Return 0
        End Function
    End Class


    Private Function IsAsyncMethod(classType As Type, methodName As String)
        ' Obtain the method with the specified name.
        Dim method As MethodInfo = classType.GetMethod(methodName)

        Dim attType As Type = GetType(AsyncStateMachineAttribute)

        Dim attrib = CType(method.GetCustomAttribute(attType), AsyncStateMachineAttribute)
        ' The above variable contains the StateMachineType property.

        Return (attrib IsNot Nothing)
    End Function

    Private Function IsIteratorMethod(classType As Type, methodName As String)
        ' Obtain the method with the specified name.
        Dim method As MethodInfo = classType.GetMethod(methodName)

        Dim attType As Type = GetType(IteratorStateMachineAttribute)

        ' Obtain the custom attribute for the method.
        ' The value returned contains the StateMachineType property.
        ' Nothing is returned if the attribute isn't present for the method.
        Dim attrib = CType(method.GetCustomAttribute(attType), IteratorStateMachineAttribute)

        Return (attrib IsNot Nothing)
    End Function

    Private Sub ShowResult(classType As Type, methodName As String)
        Console.Write((methodName & ": ").PadRight(16))

        If IsAsyncMethod(classType, methodName) Then
            Console.WriteLine("Async method")
        ElseIf IsIteratorMethod(classType, methodName) Then
            Console.WriteLine("Iterator method")
        Else
            Console.WriteLine("Regular method")
        End If

        ' Note: The IteratorStateMachineAttribute applies to Visual Basic methods
        ' but not C# methods.
    End Sub

    Sub Main()
        ShowResult(GetType(TheClass), "AsyncMethod")
        ShowResult(GetType(TheClass), "IteratorMethod")
        ShowResult(GetType(TheClass), "RegularMethod")

        Console.ReadKey()
    End Sub

    '   AsyncMethod:    Async method
    '   IteratorMethod: Iterator method
    '   RegularMethod:  Regular method

End Module

Poznámky

Nepoužívejte AsyncStateMachine atribut pro metody v kódu.You shouldn't apply the AsyncStateMachine attribute to methods in your code. Pro metody, které mají modifikátor Async, kompilátor použije AsyncStateMachine atribut v Il, který vygeneruje kompilátor.For methods that have the async modifier, the compiler will apply the AsyncStateMachine attribute in the IL that the compiler emits.

Pokud má metoda (methodName) modifikátor Async nebo Async, vygeneruje kompilátor Il, který obsahuje strukturu stavového stroje.When a method (MethodName) has the Async or async modifier, the compiler emits IL that includes a state machine structure. Tato struktura obsahuje kód v metodě.This structure contains the code in the method. Tato IL také obsahuje zástupnou metodu (methodName), která volá do stavového počítače.That IL also contains a stub method (MethodName) that calls into the state machine. Kompilátor přidá AsyncStateMachine atribut do metody zástupné procedury, aby nástroje mohly identifikovat odpovídající Stavový počítač.The compiler adds the AsyncStateMachine attribute to the stub method so that tools can identify the corresponding state machine. Podrobnosti vygenerovaného IL se můžou v budoucích verzích kompilátorů změnit.Details of the emitted IL might change in future releases of the compilers.

Informace o funkci Async naleznete v tématu asynchronní programování s modifikátorem Async a operátoru await.For information about the Async feature, see Asynchronous Programming with Async and Await.

Konstruktory

AsyncStateMachineAttribute(Type) AsyncStateMachineAttribute(Type) AsyncStateMachineAttribute(Type) AsyncStateMachineAttribute(Type)

Inicializuje novou instanci třídy AsyncStateMachineAttribute třídy.Initializes a new instance of the AsyncStateMachineAttribute class.

Metody

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Vrací hodnotu, která určuje, zda je tato instance rovna zadanému objektu.Returns a value that indicates whether this instance is equal to a specified object.

(Inherited from Attribute)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Vrátí kód hash této instance.Returns the hash code for this instance.

(Inherited from Attribute)
GetType() GetType() GetType() GetType()

Type Získá aktuální instanci.Gets the Type of the current instance.

(Inherited from Object)
IsDefaultAttribute() IsDefaultAttribute() IsDefaultAttribute() IsDefaultAttribute()

Při přepsání v odvozené třídě označuje, zda je hodnota této instance výchozí hodnotou pro odvozenou třídu.When overridden in a derived class, indicates whether the value of this instance is the default value for the derived class.

(Inherited from Attribute)
Match(Object) Match(Object) Match(Object) Match(Object)

Při přepsání v odvozené třídě vrátí hodnotu, která označuje, zda je tato instance rovna zadanému objektu.When overridden in a derived class, returns a value that indicates whether this instance equals a specified object.

(Inherited from Attribute)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Vytvoří kopii aktuálního Objectseznamu.Creates a shallow copy of the current Object.

(Inherited from Object)
ToString() ToString() ToString() ToString()

Vrací řetězec, který představuje aktuální objekt.Returns a string that represents the current object.

(Inherited from Object)
_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Mapuje sadu názvů na odpovídající sadu identifikátorů pro rozesílání.Maps a set of names to a corresponding set of dispatch identifiers.

(Inherited from Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Načte informace o typu pro objekt, který lze použít k získání informací o typu pro rozhraní.Retrieves the type information for an object, which can be used to get the type information for an interface.

(Inherited from Attribute)
_Attribute.GetTypeInfoCount(UInt32) _Attribute.GetTypeInfoCount(UInt32) _Attribute.GetTypeInfoCount(UInt32) _Attribute.GetTypeInfoCount(UInt32)

Získá počet rozhraní typu informací, které objekt poskytuje (0 nebo 1).Retrieves the number of type information interfaces that an object provides (either 0 or 1).

(Inherited from Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Poskytuje přístup k vlastnostem a metodám vystaveným objektem.Provides access to properties and methods exposed by an object.

(Inherited from Attribute)

Vlastnosti

StateMachineType StateMachineType StateMachineType StateMachineType

Vrátí objekt typu pro typ základního stavového počítače, který byl vygenerován kompilátorem k implementaci metody State Machine.Returns the type object for the underlying state machine type that was generated by the compiler to implement the state machine method.

(Inherited from StateMachineAttribute)
TypeId TypeId TypeId TypeId

Při implementaci v odvozené třídě získá jedinečný identifikátor Attribute.When implemented in a derived class, gets a unique identifier for this Attribute.

(Inherited from Attribute)

Platí pro

Viz také