我最近了解到任何具有GetAwaiter
方法返回一个侍者的对象都可以是await
-ed。这是真的,即使它是一个扩展方法,这意味着基本上任何对象都可以使await
-able,如果你这样选择的话。
但是有一种方法告诉在运行时,如果一个对象是await
-able?普通反射不起作用,因为它没有列出对象的扩展方法。
我问这个问题没有特别的需要,我只是好奇这是否可能。
这是不可能的,因为c#编译器用来做决定的信息已经消失了。
为了解析扩展方法,我们需要知道所导入的名称空间。该信息在运行时不可用。这是一个仅c#的概念。CLR不知道using
是什么
我想不出你有什么理由想要查看一个对象在运行时是否可能是可等待的,因为你不能对该信息采取行动。也许你可以检查一下对象是否为Task
?