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