这是不可能的,因为C#编译器用于作出该决定的信息已经消失了。
为了解决扩展方法,我们需要知道已导入的命名空间。该信息在运行时不可用。这是一个仅限于C#的概念。CLR不知道using
是什么。
我无法想出任何理由来确定对象在运行时是否可能等待,因为您无法根据那个信息采取行动。也许您可以检查对象是否为Task
?
你必须查看所有可能定义扩展方法的程序集。
这是不可能的,因为您无法知道在编译时引用了哪些程序集,但可能未使用和丢弃。此外,您不知道所采用的用法。还有,可能存在在任何地方都没有引用但确实存在的程序集中定义的扩展。 - usr