我应该将 new HttpRequestMessage() 包装在 using 语句中吗?

问题描述 投票:0回答:1

我找到了以下代码:

using (var requestMessage = new HttpRequestMessage(HttpMethod.Delete, endpoint))
{
    ...
    HttpResponseMessage response = await _client.SendAsync(requestMessage);
    ...
}

我以前没见过这种图案。

我知道

System.Net.Http.HttpRequestMessage
实现了
IDisposable
,但这是否意味着我们应该将其包装在
using
语句中?

c# .net .net-6.0 idisposable using-statement
1个回答
0
投票

是的,你应该这样做。 文档认可这种做法。

如果您的应用程序仅使用实现

IDisposable
的对象 接口,你应该调用对象的
IDisposable.Dispose
当您使用完毕后实施。取决于您的 编程语言,您可以通过以下两种方式之一来完成此操作:

  • 通过使用语言构造,例如 C# 和 Visual Basic 中的
    using
    语句以及 F# 中的
    use
    语句或
    using
    函数。
  • 通过将对
    IDisposable.Dispose
    实现的调用包装在 try/finally 块中。

不过,您不必将代码块“包装”在

using
语句中。从 C# 8 开始,您还可以使用
using
声明
。只需声明一个常规变量,并在开头添加
using
即可。

HttpRequestMessage
之所以实现
IDisposable
,是因为它的
Content
IDisposable
。那为什么需要处置
HttpContent
呢?因为您可以使用其子类
Stream
将内容作为
Stream
读取,或者将内容作为
StreamContent
提供。这些都涉及到需要处理的流。查看这些 API 的源代码以获取更多信息。

从技术上来说,如果你不做上述任何事情,

HttpRequestMessage.Dispose

什么也做不了,但谁知道未来会发生什么变化呢?

© www.soinside.com 2019 - 2024. All rights reserved.