C#: “Using” Statements with HttpWebRequests/HttpWebResponses

限于喜欢 提交于 2019-11-29 03:05:32
Dzmitry Huba

HttpWebRequest itself is not disposable unlike HttpWebResponse. You should wrap disposable resources with using to allow early and determined cleanup. Correctly implemented IDisposable pattern allows multiple calls to Dispose without any issues so even the outer using statement wraps resource that during its own dispose disposes inner using statement resource it is still ok.

Code example

var request = (HttpWebRequest)WebRequest.Create("example.com"); 
using (var response = (HttpWebResponse)request.GetResponse()) 
{ 
    // Code here 
}

Everything wrapped in a using () {} block (that is, inside of the first brackets) is disposed when you leave the scope.

I haven't used your library so far (seems nice though), but I'd argue that you should explicitly dispose every IDisposable you create (= are responsible for) and don't return to a caller.

A sidenote, since I've seen a lot of people struggling with multiple things to dispose: Instead of

using (var foo = SomeIDisposable) {
  using (var bar = SomeOtherIDisposable) {
  }
}

which needs a lot of vertical space you can write

using (var foo = SomeIDisposable)
using (var bar = SomeOtherIDisposable) {
}

In order to prevent memory leaks you should call Dispose on every object that implements IDisposable. You can ensure that the Dispose method in called by using the using keyword (no pun intended) as it is just a syntactic sugar for try-finally block.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!