// 这里必须要写入System.Runtime.CompilerServices这个命名空间
namespace System.Runtime.CompilerServices
{
    /// <summary>
    /// 这个属性的用法参考网上的async/await 状态机原理
    /// AsyncTaskMethodBuilder中对应的方法也是根据这部分原理来创建的。
    /// </summary>
    public sealed class AsyncMethodBuilderAttribute : Attribute
    {
        public Type BuilderType { get; }

        /// <summary>
        /// 当一个方法被await后，编译器会将等待的方法转换成状态机，具体步骤就是按照builderType的中的方法去创建，
        /// 因此AsyncTaskMethodBuilder中会提供一系列需要的方法，否者会报错。
        /// </summary>
        /// <param name="builderType"></param>
        public AsyncMethodBuilderAttribute(Type builderType)
        {
            BuilderType = builderType;
        }
    }
}