【发布时间】:2013-11-23 05:22:29
【问题描述】:
是否可以从异步函数中获取当前方法名称?
我试过了:
System.Reflection.MethodInfo.GetCurrentMethod();
我已经尝试使用 StackTrace 和 StrackFrame,如下所示:
StackTrace strackTrace = new StackTrace();
for (int i = 0; i < strackTrace.GetFrames().Length; i++)
{
SafeNativeMethods.EtwTraceInfo("Function" + i + ":" + function);
SafeNativeMethods.EtwTraceInfo("Type" + i + ":" + strackTrace.GetFrame(i).GetType().Name);
SafeNativeMethods.EtwTraceInfo("Method" + i + ":" + strackTrace.GetFrame(i).GetMethod().Name);
SafeNativeMethods.EtwTraceInfo("ToString Call" + i + ":" + strackTrace.GetFrame(i).ToString());
}
但它们似乎都不起作用,我会得到“.ctor”、“InvokeMethod”、“Invoke”、“CreateInstance”、“CreateKnownObject”或“CreateUnknownObject”或“MoveNext”
关于如何做到这一点的任何想法?我想创建一个通用的logger函数,又不想传入调用logger函数的函数名,所以尝试了stacktrace的方法,没用。
我放弃了,说,好吧,我将函数名作为第一个参数传入,但是当我从调用通用记录器函数的调用函数中调用反射方法时,我总是得到“.ctor” "
有什么想法吗?请注意,我正在调用的通用记录器函数是同一类中的静态方法(现在必须是这种方式......)。
【问题讨论】:
标签: c# async-await