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