首页 > 解决方案 > 没有引用它的变量时的对象处置

问题描述

我有这个代码:

Method1(Method2());

但是,Method2 返回一个需要释放的对象。这是我可以处理的方法:

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

Method1 和 Method2 属于框架,我无法更改它们。

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

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

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

标签: c#disposeidisposable

解决方案


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

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

或者如果你愿意

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

其他任何事情都是不寻常和令人困惑的(即在您的方法1中处理它)......正如评论所指出的,除非这是某种命令/查询服务,或者其他可以注入一次性范围的依赖项

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


推荐阅读