将ServiceStack的JsonServiceClient包装在using语句中是最佳做法吗?
var client = new JsonServiceClient();
client.Post(request);
与
using (var client = new JsonServiceClient())
{
client.Post(request);
}
哪一个最好?
答案 0 :(得分:3)
JsonServiceClient
实施IDisposable
,因此最佳做法是将其与using
语句一起使用。
但是,在某些情况下,您需要跨多个请求共享JsonServiceClient
的实例(例如,当您使用基于cookie的会话时,因为cookie包含在实例cookie容器中)< / em>,在这种情况下,您将使用没有using
语句的客户端,但确保您的应用程序在客户端不再需要客户端时调用客户端的Dispose
方法。
This answer进一步解释了有关实施IDisposable
的类的最佳做法,例如JsonServiceClient
及其背后的推理。
通常,当您使用IDisposable对象时,您应该在using语句中声明并实例化它。 using语句以正确的方式调用对象上的Dispose方法,并且(如前所示使用它时)一旦调用Dispose,它也会导致对象本身超出范围。在using块中,该对象是只读的,不能修改或重新分配。
using语句确保即使在对象上调用方法时发生异常,也会调用Dispose。您可以通过将对象放在try块中然后在finally块中调用Dispose来实现相同的结果;实际上,这就是编译器如何翻译using语句。前面的代码示例在编译时扩展为以下代码(注意额外的花括号以创建对象的有限范围):
我希望有所帮助。