MethodInfo.Invoke()抑制异常

时间:2019-06-28 13:38:44

标签: c# reflection

我使用反射来调用引发异常的方法。 但是不会抛出该异常,我可以直接接受它。
我通过致电

进行调用
GetMethod().Invoke(myInstance, new object[] { result });

结果为对象类型。 所调用的方法将引发如下异常:

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

    }

如果我不使用try-catch块,则应用程序将连续运行,并且如果我使用类似的代码:

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

因此,预期输出应为:

  

错误

但是

  

一切都很好

2 个答案:

答案 0 :(得分:4)

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

Task

答案 1 :(得分:3)

MyMethod 不会引发异常。它返回Task,该状态最终将处于故障状态。您可以访问该任务的成员(完成后),以查看它导致了异常,但是调用MyMethod不会永远都不会引发异常,因为它是async方法。它只会 返回处于一种或另一种状态的Task