MethodInfo.Invoke() 抑制异常

Fan*_*ner 2 c# reflection

我使用反射来调用引发异常的方法。但是这个异常没有抛出,我也无法捕获它。
我通过调用调用:

GetMethod().Invoke(myInstance, new object[] { result });
Run Code Online (Sandbox Code Playgroud)

其中结果是对象类型。被调用的方法抛出异常,例如:

public async Task MyMethod(Object input)
    {
        // do something...
        throw new Exception("Error");

    }
Run Code Online (Sandbox Code Playgroud)

如果我不使用 try-catch 块,应用程序将连续,如果我使用如下块:

try
{
    GetMethod().Invoke(myInstance, new object[] { result });
    log("everything is ok");
}
catch(Exception e)
{
    log(e.message) 
}
Run Code Online (Sandbox Code Playgroud)

所以预期的输出应该是:

错误

但是

一切都好

Jes*_*Wit 7

您的方法返回 a Task,因此实际上不会引发异常。为了获得异常,您应该首先解开任务:

var result = GetMethod().Invoke(myInstance, new object[] { result });
if (result is Task task)
{
    // this line will throw.
    await task;
}
Run Code Online (Sandbox Code Playgroud)