Do Actions以不同方式抛出异常吗

时间:2013-11-25 19:58:20

标签: c# exception-handling .net-3.5

请考虑以下代码:

public void RunScriptBuild()
{
    try
    {
        _helper.RunScriptBuild(); //throws FileNotFoundException
    }
    catch (Exception ex)
    {
        LogException(ex);
    }
}

private void LogException(Exception ex)
{
    //write to log file
    ExceptionPolicy.HandleException(ex, "Logging Policy");
}

这非常好用,我可以将大量信息写入我的日志文件。 相反,我的实际代码如下:

public void RunScriptBuild()
{
    RunAction(_helper.RunScriptBuild); 
}

private void RunAction(Action task)
{
    try
    {
        task(); //still throws FileNotFoundException
    }
    catch (Exception ex)
    {
        LogException(ex);
    }
}

private void LogException(Exception ex)
{
    //doesn't write to log file
    ExceptionPolicy.HandleException(ex, "Logging Policy");
}

所以现在调用RunAction并抛出错误时,没有任何内容写入我的日志文件。单步执行它,LogException 被调用,我可以毫无问题地跨过它。我无法进入HandleException,因为它是MS企业应用程序块的一部分。但是我的老板不喜欢我这样做,并说我需要使用更通用的方法,因为它们更灵活,并且在这里提出了第二个代码块。

我只是看了MSDN - How to Handle Exceptions thrown by Tasks,但对我帮助不大。我正在使用.NET 3.5,因此我没有可用的AggregateExceptions。似乎找不到“如何处理行动引发的异常”......

1 个答案:

答案 0 :(得分:1)

这与从委托中抛出异常的事实无关。

这可能与你正在调用一个不同的实际方法这一事实有关,可能导致抛出不同的异常,因此处理方式不同,或者可能是某些更改,可能是环境因素导致异常处理程序在这两种情况下采取不同的行动,由于某种原因完全没有使用代理而不是直接的方法调用。