c# - C# 对当前异步方法的反思
问题描述
我试图找出一种直接的方法来获取当前正在执行的异步方法的反射属性。如果我只是在常规的非异步方法中做这样的事情,我正在寻找相同的属性:
var method = (MethodInfo)MethodBase.GetCurrentMethod();
但是如果我在一个异步方法中,当使用上面的反射代码时,我会从反射中得到一个MoveNext()方法。
我是否只需要使用 StackTrace 或 StackFrame 加强调用堆栈?
我唯一的问题是它有点手动。此代码需要动态,因为我的实现将用于日志记录,并且需要在许多应用程序中可靠和准确。它需要同时使用异步和同步方法/函数。
目前我能找到的只是人们使用烘焙的 .net CallermemberName
属性,它获取当前正在执行的方法的正确名称,但显然我需要的不止这些。
任何帮助将不胜感激。谢谢!
解决方案
这取决于您要使用的记录器,例如 NLog 已经具有此功能,但正如其网站上所述,将其用于异步功能会导致性能受到严重影响,可能是由于遍历堆栈。
推荐阅读
- android - Toggle WebView Multiprocess flag does not take effect
- image - How to apply a logo image on an imported 3ds mesh
- npm - Getting 404 error on npm install webpack-node-externals
- angular - Angular 8,我使用旧的 webpack systen(在没有 angular cli 时返回)
- google-maps - 如何像谷歌地图一样找到两点之间的路线
- node.js - 来自客户端的 Angular Universal 转发 IP,用于所有 SSR API 调用
- c# - C#检查标志枚举是否只有一个值集
- cryptography - 在 Corda 中,我可以将一方作为可选签名者加入吗?
- java - 将 CSV 文件从 S3 加载到 postgressql
- html - 图标格式在源代码中显示为 svg