我一直在使用Invoke
方法,并意识到在目标方法中抛出异常时,TargetInvokationException
实际上会提升。我不明白为什么C#创建者使用这种方法。这对我没有意义。
我的意思是,为什么不抛出原始的Exception而不是抛出一个具有原始异常作为InnerException的二级异常?
答案 0 :(得分:3)
只是为了迂腐,这是一个.Net框架异常 - 而不是C#异常。
使用反射意味着您可以在调用者和被调用者之间进行非常松散的耦合(启动调用的方法以及调用的最终目标方法)。 源和目标可以是完全不同的程序集,这些程序集在编译时没有链接,并且彼此之间一无所知。由于此过程的动态特性,采用event aggregation approach,包装它然后抛出新异常是正确的。在TPL之类的其他地方也使用相同的方法,其中在重新抛出之前,任务中抛出的错误被包装在System.Aggregate exception中。
答案 1 :(得分:1)
Invoke
(或DynamicInvoke
)可以在执行" real"之前抛出自己的异常。方法。
TargetInvocationException
允许确定错误原因:委托类或方法中的代码。