我想获取所谓我的函数的方法的名称,这似乎是 Tpl 的一个问题
有什么好的解决办法吗?
顺便说一句:我知道 CallerMemberName ,但我想要一个不同的解决方案,这样就不会弄乱我的代码
这是我的测试代码,因此可以在下一版本的 Tpl 中进行破解
class Program
{
static void Main(string[] args)
{
Console.WriteLine(F1().Result);
Console.ReadKey();
}
static async Task<string> F1()
{
return await F2();
}
static Task<string> F2()
{
var callingMethods = new StackTrace().GetFrames().Select(v => v.GetMethod().Name);
var result = string.Join(Environment.NewLine, callingMethods);
return Task.FromResult(result);
}
}
这是输出
F2
MoveNext
Start
F1
Main
...
最佳答案
您可以过滤掉所有不属于您的程序集,例如通过检查程序集不在 GAC 中:
var callingMethods = new StackTrace().GetFrames()
.Select(v => v.GetMethod())
.Where(m => !m.DeclaringType.Assembly.GlobalAssemblyCache
&& !m.DeclaringType.CustomAttributes.Any(ca => ca.AttributeType == typeof(CompilerGeneratedAttribute))
)
.Select(m => m.Name);
输出:
F2
F1
Main
关于c# - 如何仅在使用 TPL 时从自己的方法获取堆栈跟踪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40971869/