首页 > 解决方案 > C# 对当前异步方法的反思

问题描述

我试图找出一种直接的方法来获取当前正在执行的异步方法的反射属性。如果我只是在常规的非异步方法中做这样的事情,我正在寻找相同的属性:

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

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

我是否只需要使用 StackTrace 或 StackFrame 加强调用堆栈?

我唯一的问题是它有点手动。此代码需要动态,因为我的实现将用于日志记录,并且需要在许多应用程序中可靠和准确。它需要同时使用异步和同步方法/函数。

目前我能找到的只是人们使用烘焙的 .net CallermemberName属性,它获取当前正在执行的方法的正确名称,但显然我需要的不止这些。

任何帮助将不胜感激。谢谢!

标签: c#asynchronousreflection

解决方案


这取决于您要使用的记录器,例如 NLog 已经具有此功能,但正如其网站上所述,将其用于异步功能会导致性能受到严重影响,可能是由于遍历堆栈。


推荐阅读