6

我有一小段代码调用 Web 服务客户端方法。

该方法返回一个消息数组作为输出参数。这些消息通常包含已发生的任何错误的详细信息。当错误确实发生时,也会引发异常。

无论是否引发异常或异常类型,我都想记录消息。登录 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);
}
4

2 回答 2

6

是的,finally 块总是会被执行(即使没有抛出异常)。因此,在这种情况下将 Logging 放在那里是有道理的。

于 2013-07-02T08:51:57.687 回答
2

finally无论是否抛出任何异常,都会始终执行I block。

如果这是您的完整代码,那很好。如果没有,我建议在记录消息变量之前进行一些空检查,因为在引发异常时它可能不会被初始化。

我认为像这样记录是完全公平的。

编辑:

我忘了提到有一些极端情况会阻止 finally 执行——我不认为这是你的情况,但值得一提(感谢Simon 指出!)。

此外,finally如果您希望您的方法即使您的方法返回,我也喜欢这种方法。

于 2013-07-02T08:59:58.713 回答