Мои вопросы относятся к этому сообщению Перехват вызова метода 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, которая не может быть передана напрямую.