我对使用(){}有疑问。我知道它使用Idisposable接口。所以如果我在linq中写实体:
Using(objectconext context=new objectcontext())
{
throw new Exception();
}
是否仍然释放对象上下文并关闭现有连接,或者它将保持活动状态。谢谢,高拉夫
发布于 2011-04-11 16:00:23
using
语句扩展为try
finally
块。因此,当抛出异常时,应该执行using
语句中的finally
块。
来自http://msdn.microsoft.com/en-us/library/yh598w02.aspx
using语句可确保即使在调用对象的方法时发生异常,也会调用Dispose。
接下来会发生什么是另一回事。正如spender在他的回答中指出的那样,DataContext
没有义务关闭它正在使用的连接,您也不需要担心它(因为DataContext
应该为您正确地管理连接)。
在某些情况下,抛出的异常可能会被try
finally
块静默地接受。请看这里:http://www.digitallycreated.net/Blog/51/c%23-using-blocks-can-swallow-exceptions。不过,这应该不会影响到你。
发布于 2011-04-11 15:57:49
连接不一定会关闭,因为这是在别处管理的。
发布于 2011-04-11 16:06:50
块对于清理try块中分配的任何资源以及运行任何必须执行的代码非常有用,即使有异常也是如此。无论try块如何退出,都会始终将控制权传递给finally块。
由于“使用”是try {} finally { /*calling IDisposable.Dispose() */ }
块的语法糖,使用应该保证您的对象即使在出现异常的情况下也得到了正确的处理。
https://stackoverflow.com/questions/5624040
复制