几个Caller-特性的妙用( 三 )

几个Caller-特性的妙用
文章插图
四、”魔法”的背后其实这四个Attribute背后并没有什么魔法,“语法糖”而已 。对于Invoker的三个方法(InvokeAsync、FooAsync和BarAsync)针对StartNewActivity扩展方法的调用 。虽然我们并没有指定任何参数,但是编译器在编译后会帮助我们将参数补齐,完整的代码如下所示 。
using System.Diagnostics;using System.Threading.Tasks;public class Invoker{    private readonly ActivitySource _activitySource;    public Invoker(ActivitySource activitySource)    {        _activitySource = Guard.ArgumentNotNull(activitySource, "activitySource");    }    public async Task InvokeAsync()    {        using (_activitySource.StartNewActivity(ActivityKind.Internal, "InvokeAsync", "D:\\Projects\\App\\App\\Program.cs", 40))        {            await Task.Delay(100);            await FooAsync();        }    }    private async Task FooAsync()    {        using (_activitySource.StartNewActivity(ActivityKind.Internal, "FooAsync", "D:\\Projects\\App\\App\\Program.cs", 49))        {            await Task.Delay(100);            await BarAsync();        }    }    private Task BarAsync()    {        using (_activitySource.StartNewActivity(ActivityKind.Internal, "BarAsync", "D:\\Projects\\App\\App\\Program.cs", 58))        {            return Task.Delay(100);        }    }}

经验总结扩展阅读