TryCatch Activity捕获捕获的异常,并且不会在调用堆栈中进一步重新抛出



考虑以下内容:

protected overrid void Execute(CodeActivityContext context)
{
    try
    {
        // this method can throw exception, but it's OK for rest of the Workflow
        UserStore.PrepareUserData(WorkflowData.Get(context).SecurityID);
        [...]
    }
    catch (Exception exc)
    {
        Logger.Write(string.Format("There was an exception while preparing execution data for user ID: {0}. Operation ID: {1}", WorkflowData.Get(context).SecurityID, context.ActivityInstanceId), "Workflow, 3, 305, TraceEventType.Warning, "PrepareDataActivity");
    }
}

UserStore.PrepareUserData方法引发的异常在try内被捕获。。CodeActivity中的catch块。问题是更高层次的尝试。。catch活动捕获捕获的异常。是否可以防止在更高级别捕获此异常?

是否可以防止在更高级别捕获此异常?

这正是你在你的例子中所做的。

此:

catch (Exception exc)
{
    Logger.Write(string.Format("There was an exception while preparing execution data 
                                for user ID: {0}. Operation ID: {1}", 
                                WorkflowData.Get(context).SecurityID, 
                                context.ActivityInstanceId), "Workflow, 3, 305,
                                TraceEventType.Warning, "PrepareDataActivity");
}

正在吞噬异常,而不是使用throw重新抛出异常。这意味着顶级catch块实际上不会捕获任何内容,因为它已经在您的较低级别块中处理过了。

在调试xaml活动中的每个项目时,我在下一个If活动中发现了导致TryCatchActivity中处理异常的错误。我用这样的东西检查变量是否为null:

SomeVar = Nothing

而不是

SomeVar is Nothing

无论如何,感谢大家的努力。

最新更新