应该将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语句。前面的代码示例在编译时展开为以下代码(注意额外的花括号以创建对象的有限范围):
我希望有所帮助。