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

时间:2019-01-20 23:44:57

标签: c# dispose idisposable

我有此代码:

Method1(Method2());

但是,Method2返回需要处理的对象。这是我的处理方法:

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

Method1和Method2属于框架,我不能更改它们。

我有很多这样的情况。例如,Method2创建HTTP请求,然后Methid1发送该请求。

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

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

1 个答案:

答案 0 :(得分:2)

使用using语句,就像您显示的那样,是的,这是一种优雅的方式

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

或者如果愿意

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

其他任何事情都将是异常且令人困惑的(即,将其放置在您的method1中)...正如评论所指出的那样,除非这是某种Command / Query Service或其他可以通过一次性作用域注入的依赖项

最近,在任何事情上致电wait都是可疑的