应该将JsonServiceClient的实例包装到using语句中吗?

问题描述:

将ServiceStack的JsonServiceClient包装在using语句中是否是最佳做法?应该将JsonServiceClient的实例包装到using语句中吗?

var client = new JsonServiceClient(); 
    client.Post(request); 

using (var client = new JsonServiceClient()) 
    { 
     client.Post(request); 
    } 

哪一个是最好的?

JsonServiceClient implements IDisposable所以最好的做法是使用它与using声明。

但是,由此就需要共享的JsonServiceClient跨多个请求的实例有场景(例如,当您使用基于cookie的会话,因为饼干所含的情况下cookie的容器),在这种情况下,你将使用没有using声明的客户端,但确保您的应用程序在不再需要客户端时调用客户端的Dispose方法。

gdoron的This answer进一步解释了实施IDisposable的类的最佳实践,例如JsonServiceClient及其背后的推理。

通常,当您使用IDisposable对象时,应该在using语句中声明并实例化它。 using语句以正确的方式调用对象上的Dispose方法,并且(如前所示使用它时)也会在调用Dispose后立即使对象本身超出范围。在使用块中,对象是只读的,不能被修改或重新分配。

using语句确保即使在对象上调用方法时发生异常,也会调用Dispose。将对象放在try块中,然后在finally块中调用Dispose,可以获得相同的结果;实际上,这是编译器如何翻译using语句。前面的代码示例在编译时展开为以下代码(注意额外的花括号以创建对象的有限范围):

我希望有所帮助。