是否有可能在运行时判断对象是否等待?

Blu*_*eft 11 c# async-await

最近了解到任何带有GetAwaiter返回awaiter的方法的对象都可以成为await-ed.即使它是一种扩展方法也是如此,这意味着如果您愿意,基本上任何对象都可以制作await.

但有没有办法在运行时告诉对象是否await可用? 正常反射将不起作用,因为它不会列出对象的扩展方法.

在提出这个问题时,我并没有特别的需要,我只是好奇是否有可能.

usr*_*usr 7

这是不可能的,因为C#编译器用来做出决定的信息已经消失.

为了解析扩展方法,我们需要知道导入的命名空间.该信息在运行时不可用.这是一个C#-only概念.CLR不知道是什么using.

我想不出有什么理由你想看一个对象是否可能在运行时等待,因为你不能对这些信息采取行动.也许你可以检查对象是否是一个Task