MGO*_*wen 1 c# using-statement try-catch httprequest
我有这个代码:
using (var requestStream = request.GetRequestStream())
{
byte[] data = Encoding.UTF8.GetBytes(xmlData);
requestStream.Write(data, 0, data.Length);
}
Run Code Online (Sandbox Code Playgroud)
如果由于远程服务器关闭而导致我的请求失败,我该如何捕获错误?
我应该将使用块扩展到try-catch-finally,还是使用"使用"块时有更优雅的方法?
(我需要以这种方式只捕获服务器正在下降的类型错误 - 我需要向客户端显示这些错误,因为他们的服务器连接不充分,而不是因为我们的软件中的错误或其他东西).
这里肯定有四种选择:
放弃using,只需要一个try/ catch/ finally:
var requestStream = request.GetRequestStream();
try
{
byte[] data = Encoding.UTF8.GetBytes(xmlData);
requestStream.Write(data, 0, data.Length);
}
catch (IOException e) // Or whatever
{
// Whatever you want
}
finally
{
requestStream.Dispose();
}
Run Code Online (Sandbox Code Playgroud)在块内放一个try/ 块:catchusing
using (var requestStream = request.GetRequestStream())
{
try
{
byte[] data = Encoding.UTF8.GetBytes(xmlData);
requestStream.Write(data, 0, data.Length);
}
catch (IOException e) // Or whatever
{
// Whatever you want
}
}
Run Code Online (Sandbox Code Playgroud)与第二个选项相同,但是使用try/ 在块catch 之外using而不是在内部.老实说,我认为你使用它并没有多大区别.
无论如何都要在更高级别捕获异常,例如在调用方法中.通常这是一种更好的方法,因为您可能希望从"更大"操作的角度以相同的方式处理来自多个"小"操作的一种类型的异常.
就个人而言,我一般赞成第二种方法或第四种方法.这是一个一致的变化:当我想要捕获异常时,我会引入一个try/ catchblock.碰巧在using声明中的事实既不在这里也不在那里.它最终会有更多的嵌套,但我发现它很少发生,这不是问题.
| 归档时间: |
|
| 查看次数: |
471 次 |
| 最近记录: |