我有一小段代码调用webservice客户端方法。
该方法返回一个消息数组作为out参数。这些消息通常包含已发生的任何错误的详细信息。当发生错误时,也会抛出异常。
我想记录消息,无论是抛出异常还是异常类型。登录finally块可接受的做法吗?
WebServiceClient client = GetWebServiceClient();
Console.WriteLine("Calling getUpdates...");
ItemStatus[] itemStatuses;
Message[] messages = null;
string outToken;
try
{
outToken = client.getUpdates(inToken, out itemStatuses, out messages);
}
finally
{
LogMessages(messages);
}
答案 0 :(得分:6)
是的,将始终执行finally块(即使没有抛出异常)。因此,将Logging置于此上下文中是有意义的。
答案 1 :(得分:2)
无论是否抛出任何异常,都将始终执行finally
块。
如果这是您的完整代码,那就没关系。如果没有,我建议在记录消息变量之前进行一些空检查,因为在抛出异常时它可能不会被初始化。
我认为这样的记录非常公平。
修改强>
我忘了提到有一些corner cases会阻止最终执行 - 我不相信这是你的情况,但值得一提(感谢Simon指出它!)。
此外,如果您希望方法记录,即使方法返回,我也喜欢finally
方法。