前言本文记录一次简单的 SourceGenerator
实战,最终实现可以在代码中 await
任意类型对象,仅供娱乐 , 请勿在生产环境中使用?。。?
关键技术:
- SourceGenerator
- 在编译时动态生成代码的技术 。官方文档:源生成器
- 关于
IncrementalGenerator
的基本使用可以参考 dotnet 用 SourceGenerator 源代码生成技术实现中文编程语言
SourceGenerator
除了提供附加文件进行代码生成,还有丰富的语法树、类型等分析API
SourceGenerator
只能拓展
代码,不能替换
代码
- Await anything
- C#中的
async/await
最终由编译器编译为状态机,其核心逻辑在于await
对象需要实现符合要求的GetAwaiter
方法,这个方法可以是拓展方法
- 参见官方博客 await anything;
await
我们的思路大概如下:- 找到所有的
await
语法
- 检查
await
的对象是否有GetAwaiter
方法
- 为没有
GetAwaiter
方法的对象生成GetAwaiter
拓展方法
SourceGenerator
丰富的分析API,我们可以很容易的办到这件事推荐阅读
- 文字的力量先听语音再对梗怎么过
- iphone13pro和华为p50pro拍照对比_哪款拍照效果更好
- 荣耀平板v7pro和小米平板5哪个好_荣耀平板v7pro和小米平板5对比
- Docker | redis集群部署实战
- 苹果iphone13mini和12mini有什么区别_参数对比
- paddle&蜜度 文本智能较对大赛经验分享(17/685)
- 红米k40和魅族18x对比_哪款更值得入手
- 三星watch4和classic区别_三星watch4和classic区别对比
- iPhone13ProMax和华为Mate40Pro+对比_哪款更值得入手
- 骁龙888和三星Exynos1080区别对比_哪个性能好