我最近了解到任何带有GetAwaiter返回awaiter的方法的对象都可以成为await-ed.即使它是一种扩展方法也是如此,这意味着如果您愿意,基本上任何对象都可以制作await.
但有没有办法在运行时告诉对象是否await可用? 正常反射将不起作用,因为它不会列出对象的扩展方法.
在提出这个问题时,我并没有特别的需要,我只是好奇是否有可能.
这是不可能的,因为C#编译器用来做出决定的信息已经消失.
为了解析扩展方法,我们需要知道导入的命名空间.该信息在运行时不可用.这是一个C#-only概念.CLR不知道是什么using.
我想不出有什么理由你想看一个对象是否可能在运行时等待,因为你不能对这些信息采取行动.也许你可以检查对象是否是一个Task?
| 归档时间: |
|
| 查看次数: |
384 次 |
| 最近记录: |