C# 如何仅在使用TPL时从自己的方法获取堆栈跟踪?
我想得到被称为我的函数的方法的名称,Tpl似乎有点问题 有什么好办法吗 顺便说一句:我知道,但我想要一个不同的解决方案,这样就不会弄乱我的代码 这是我的测试代码,可以在下一个版本的Tpl中使用C# 如何仅在使用TPL时从自己的方法获取堆栈跟踪?,c#,task-parallel-library,C#,Task Parallel Library,我想得到被称为我的函数的方法的名称,Tpl似乎有点问题 有什么好办法吗 顺便说一句:我知道,但我想要一个不同的解决方案,这样就不会弄乱我的代码 这是我的测试代码,可以在下一个版本的Tpl中使用 class Program { static void Main(string[] args) { Console.WriteLine(F1().Result); Console.ReadKey(); } static async Task
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
下一步
开始
F1
主要
您可以筛选出所有不属于您的程序集,例如,检查程序集不在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
主要
你考虑过为什么第三方物流会有点问题吗?因为他们在这两者之间加了一层