本文介绍了我怎样才能知道如果C#方法是异步/通过反射等待?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

例如

 类Foo {公共异步任务栏(){等待Task.Delay(500); }}

如果我们反映在这个类和方法,我怎么能确定这是否是一个实际的异步/ await方法,而不是简单地,恰好返回任务的方法?

 类Foo {公共任务栏(){返回Task.Delay(500); }}


解决方案

在我的code的复印件,的MethodInfo 异步方法中包含在 CustomAttributes 财产的下列项目:


  • DebuggerStepThroughAttribute

  • AsyncStateMachineAttribute

,而的MethodInfo 对于正常方法中包含的没有的在其 CustomAttributes 属性的项目

这似乎是 AsyncStateMachineAttribute 找到。

编辑:事实上,网页甚至有例子中的以下

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

这篇关于我怎样才能知道如果C#方法是异步/通过反射等待?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-05 10:45