C#当前异步方法的反射

3

我正在尝试找出一种比较直接的方法来获取当前执行异步方法的反射属性。我要寻找的是与在常规的非异步方法中执行以下操作时可用的相同属性:

var method = (MethodInfo)MethodBase.GetCurrentMethod();

但是,如果我在异步方法中使用上述反射代码,我会从反射中得到一个MoveNext()方法。

那么,我只需要使用StackTrace或StackFrame来逐级查找调用堆栈吗?

唯一的问题是这种方法比较繁琐。由于我的实现将用于日志记录,并且需要在许多应用程序中可靠和准确地工作,因此此代码需要具有动态性。它需要适用于异步和同步方法/函数。

目前我能找到的唯一资料就是使用内置的.NET CallermemberName属性,该属性获取当前执行方法的正确名称,但显然我需要更多信息。

非常感谢您的帮助!


你将使用哪个日志记录器?Nlog已经内置了当前方法。https://dev59.com/wGEh5IYBdhLWcg3w12il - Neil
我正在使用Serilog,不幸的是NLog不是一个选项。 - ganjeii
1个回答

2

这取决于您要使用哪个记录器,例如NLog已经具备此功能,但正如其网站上所提到的,将其用于异步函数会带来沉重的性能损失,可能是由于遍历堆栈。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接