Max*_*sky 21 c# using using-statement httpwebrequest httpwebresponse
Jon Skeet 在我的SOApiDotNet代码(用于pre-alpha Stack Overflow API的.NET库)上发表评论(通过推特):
@ maximz2005我注意到的一件事就是快速浏览源代码:你没有处理(原文如此)WebResponses.FTW"使用"声明.
他表示我需要将这些Web会话包装在"using"语句中.但是,我有一个问题:我应该包装整个事情,从HttpWebRequest开始,还是应该在"using"语句之外创建WebRequest然后将Response包装在里面?我感觉不同的是,在前者中,两个物体都会被处理掉 - 这是正确的吗?
提前致谢.
Dzm*_*uba 47
HttpWebRequest本身不是一次性的HttpWebResponse.您应该使用一次性资源包装,以便尽早进行清理.正确实现的IDisposable模式允许多次调用而Dispose没有任何问题,因此即使外部使用语句包装资源,在其自己的dispose处理内部使用语句资源时它仍然可以.
代码示例
var request = (HttpWebRequest)WebRequest.Create("example.com");
using (var response = (HttpWebResponse)request.GetResponse())
{
// Code here
}
Run Code Online (Sandbox Code Playgroud)
当你离开范围时,包含在using(){}块(即,在第一个括号内)的所有东西都会被处理掉.
到目前为止我还没有使用过你的库(虽然看起来不错),但我认为你应该明确地处理你创建的每个IDisposable(=负责)并且不要返回给调用者.
一个旁注,因为我看到很多人在处理多种事情时都在苦苦挣扎:而不是
using (var foo = SomeIDisposable) {
using (var bar = SomeOtherIDisposable) {
}
}
Run Code Online (Sandbox Code Playgroud)
你需要写很多垂直空间
using (var foo = SomeIDisposable)
using (var bar = SomeOtherIDisposable) {
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27404 次 |
| 最近记录: |