Мой код делает это для вызова зарегистрированного метода при поступлении сетевых запросов. Это часть системы RPC.
Delegate method;
object result = method.DynamicInvoke(args);
Когда метод возвращает значение, все хорошо.Но когда он возвращает что-то ожидаемое, я не заинтересован в том, чтобы пытаться вернуть это ожидаемое что-то вызывающему абоненту сети.Они не будут использовать это, и это, вероятно, в любом случае не подлежит передаче.Вместо этого мне нужно дождаться его и затем вернуть фактический результат.
Я мог бы просто проверить, является ли тип возвращаемого значения метода чем-то вроде Task
.Или Task<T>
.Этого достаточно?Разве во вселенной не может быть других ожидаемых вещей?Как бы я проверил для типа Task
?Я имею в виду, я не могу просто сделать что-то вроде этого:
method.Method.ReturnType is Task
Это не будет правдой.И нет также:
method.Method.ReturnType.IsAwaitable
Я признаю, что не смогу дождаться async void
метода.Но следует ожидать чего-то еще, в конечном итоге ожидаемого.