c# - 正确处理responseStream和StreamReader关闭

标签 c# resources nullreferenceexception streamreader

我有一个用 C# 编写的独立处理程序 ( .ASHX ),用于处理携带 XML 负载的传入推送通知,然后解析这些 XML 并提取和处理从中获取的任何必要信息。问题是我无法在本地测试这一点,因为我们的开发环境防火墙太严密,而且我不允许传入通知出现异常(exception)情况。

我已经在我们的测试环境中对此进行了测试,并且正在正确接收和处理通知,但是经过随机代码审查后,我的处理方式似乎可能存在问题 responseStreamsstreamReaders .

我的问题是,这是处理这些资源关闭的有效方法吗?或者这可能会导致 NullReferenceException

处理这些资源的标准做法是什么,我应该使用 using声明以使其仅在该范围内使用,或者此代码是否足够?

Stream responseStream = null;
StreamReader reader = null;
string serverResponse = null;

try
{
    responseStream = response.GetResponseStream();
    reader = new StreamReader(responseStream);
    serverResponse = reader.ReadToEnd();
}

finally
{
    if (reader == null)
    {
        reader.Close();
    }

    if (responseStream == null)
    {
        responseStream.Close();
    }

    response.Close();
 }

最佳答案

最好使用 using block :

string serverResponse = null;
using (Stream responseStream = response.GetResponseStream())
{
   using (StreamReader reader = new StreamReader(responseStream))
   {
       serverResponse = reader.ReadToEnd();
   }
}

这样,即使 using 语句中出现异常,所有流也将正确关闭。

关于c# - 正确处理responseStream和StreamReader关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19266542/

相关文章:

c++ - 是否可以从外部进程注入(inject)和执行应用程序?

android - 如何从 android 包中的资源 id 获取 Drawable 对象?

c# - 第三方 dll 中奇怪的 NullReferenceException : C#

c# - 如何检查字符串是否为空并在同一行中分配其值

c# - 在xml中一次添加多个节点

c# - BitmapImage - 图像下载问题

c# - 如何在没有用户名和密码但仅使用 token 的情况下访问 REST API 方法?

c# - IL 程序无效,我做错了什么? (简单的 if-else 代码)

javascript - JQuery 根据另一个输入框是否有值切换输入框

c++ - 在资源中连接定义和字符串