Мои вопросы относятся к этому сообщению Перехват вызова метода async с использованием DynamicProxy
Я хочу реализовать перехватчик, который работает с асинхронными методами, который возвращает результат Task
или Task<T>
.
Я использую следующий код для результата return ContinueWith
(чтобы метод вызывающего абонента ждал, пока работает перехватчик)
var task = invocation.ReturnValue as Task;
invocation.ReturnValue = task.ContinueWith(c =>
{ code that should execute after method finish });
Выше код отлично работает для результата Task
, но в случае Task<T>
результат ContinueWith
изменит тип возврата с Task<T>
на Task
.
Мне нужно вызвать перегруженный метод ContinueWith, который возвращает Task<T>
, но для этого мне нужно передать invocation.ReturnValue
в Task<T>
Я не нашел способ динамически изменять его. Кто-нибудь знает, как это сделать?
Я также попытался вызвать этот метод через отражение, но параметр - это функция labmda, которая не может быть передана напрямую.