Можно ли определить, ожидает ли объект во время выполнения?

I недавно узнал, что любой объект с методом GetAwaiter возвращает awaiter может быть await -ed. Это верно, даже если для этого можно использовать метод расширения, означающий в основном любой объект await -able, если вы так решите.

Но есть ли способ сказать во время выполнения, если объект await -able? Нормальное отражение не будет работать, поскольку оно не отображает методы расширения объекта.

У меня нет особой необходимости при задании этого вопроса, мне просто интересно, если это возможно.

Ответ 1

Это невозможно, потому что информация, которую использует компилятор С# для принятия этого решения, отсутствует.

Чтобы разрешить методы расширения, нам нужно знать импортируемые пространства имен. Эта информация недоступна во время выполнения. Это концепция С#. CLR не знает, что такое using.

Я не могу думать о какой-либо причине, по которой вы хотите увидеть, возможно ли объект во время выполнения, потому что вы не можете действовать по этой информации. Может быть, вы можете проверить, является ли объект Task вместо этого?