【问题标题】:C# Reflection on current async methodC# 对当前异步方法的反思
【发布时间】:2019-09-25 14:46:58
【问题描述】:

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

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

但是,如果我在异步方法中,则在使用上述反射代码时,我会从反射中获取 MoveNext() 方法。

我是否只需要使用 StackTrace 或 StackFrame 提升调用堆栈?

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

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

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

【问题讨论】:

标签: c# asynchronous reflection


【解决方案1】:

这取决于您要使用的记录器,例如 NLog 已经具有此功能,但正如他们的 web site 所述,将其用于异步函数会推断出严重的性能损失,可能是由于遍历堆栈。

【讨论】:

    猜你喜欢
    • 2019-11-03
    • 2020-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多