In my copy of your code, the MethodInfo
for the async
method contains the following items in the CustomAttributes
property:
- a
DebuggerStepThroughAttribute
- a
AsyncStateMachineAttribute
whereas the MethodInfo
for the normal method contains no items in its CustomAttributes
property.
It seems like the AsyncStateMachineAttribute
should reliably be found on an async
method and not on a standard one.
Edit: In fact, that page even has the following in the examples!
As the following example shows, you can determine whether a method is marked with Async (Visual Basic) or async (C# Reference) modifier. In the example, IsAsyncMethod performs the following steps:
Obtains a MethodInfo object for the method name by using Type.GetMethod.
Obtains a Type object for the attribute by using GetType Operator (Visual Basic) or typeof (C# Reference).
Obtains an attribute object for the method and attribute type by using MethodInfo.GetCustomAttribute. If GetCustomAttribute returns Nothing (Visual Basic) or null (C#), the method doesn’t contain the attribute.
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); }