C# 如何仅在使用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

我想得到被称为我的函数的方法的名称,Tpl似乎有点问题

有什么好办法吗

顺便说一句:我知道,但我想要一个不同的解决方案,这样就不会弄乱我的代码

这是我的测试代码,可以在下一个版本的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

下一步

开始

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

主要


你考虑过为什么第三方物流会有点问题吗?因为他们在这两者之间加了一层