gpt4 book ai didi

c# - 从方法返回 iDisposable - 谁负责处理?

转载 作者:行者123 更新时间:2023-11-30 16:56:04 25 4
gpt4 key购买 nike

给定以下代码:

    using (var webResponse = GenerateWebrequest(postURL, postParameters))
{
using (var stream = webResponse.GetResponse())
{
if (stream != null)
{
xmlDoc.Load(stream);
}
}

webResponse.Close();
}

调用方法:

private HttpWebResponse GetResponse(string postUrl, byte[] formData)
{
var request = WebRequest.Create(postUrl) as HttpWebRequest;
//other code to set up request here...

using (Stream requestStream = request.GetRequestStream())
{
requestStream.Write(formData, 0, formData.Length);
requestStream.Close();
}

return request.GetResponse() as HttpWebResponse;
}

我的问题基本上是这样的:

调用代码将方法调用包装在 using 中并处理响应流。

但是如果 GenerateWebrequest 中的 request.GetResponse() 失败会发生什么?我应该简单地将它包装在 try catch 中吗?那我要返回什么?

最佳答案

有一种特殊的模式可用于返回 IDisposable 对象的方法:

HttpWebRequest tmpRequest;
try
{
tmpRequest = WebRequest.Create(postUrl) as HttpWebReqeust;

// Whatever other stuff...

// When all other work is done. No code that can cause an exception
// should exist below this line.
var returnRequest = tmpReqeust;
tmpRequest = null;

return returnRequest;
}
finally
{
if(tmpRequest != null)
tmpRequest.Dispose();
}

该模式也适用于创建嵌套 IDisposable 对象的构造函数和创建多个 IDisposable 对象的方法。

关于c# - 从方法返回 iDisposable - 谁负责处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28498016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com