没有变量引用时的对象处理

Object disposal when there is no variable referencing it

我有这个代码:

Method1(Method2());

但是,Method2 returns 一个对象需要被释放。以下是我的处理方法:

using (var x = Method2())
{
    await Method1(x);
}

Method1和Method2属于framework,我改不了

我有很多这样的案例。例如,Method2 创建 HTTP 请求,Methid1 发送它。

同样,这两种方法都属于我无法更改的库。

我知道如果我不处理对象,垃圾收集器最终会这样做。可能不会很快。 我在徘徊,如果万一没有任何变量引用该对象(因为它将在 Method1 returns 之后),我可以指望垃圾收集器立即处理该对象,这样就可以了使用原始的短选项。

使用 using 语句,就像你展示的那样,是的,这是优雅的方式

using (var something = Method2())
{
   Method1(something);
}

或者如果你愿意

using (var something = Method2())
   Method1(something);

其他任何事情都会不寻常且令人困惑(即在您的方法 1 中处理它)...正如评论所指出的,除非这是某种 Command/Query 服务或其他可以注入的依赖项带有一次性瞄准镜

此外,最近打电话给 wait 任何事情都是可疑的