fle*_*her 8 .net c# using-statement
我正在阅读这种情况,其中使用C#using语句可能会导致问题.如果在using语句末尾调用的Dispose函数也抛出异常,则可能会丢失在using块范围内抛出的异常.这突出了在决定是否添加using语句时应特别注意某些情况.
在使用流和从DbConnection派生的类时,我只倾向于使用using语句.如果我需要清理非托管资源,我通常更喜欢使用finally块.
这是IDisposable接口的另一个用途,用于创建一个性能计时器,该计时器将停止计时器并将时间记录到Dispose函数中的注册表中. http://thebuildingcoder.typepad.com/blog/2010/03/performance-profiling.html
这是IDisposable接口的好用吗?它不会清理资源或处理任何其他对象.但是,我可以看到它如何清理调用代码,方法是在using语句中包装整齐的代码.
是否应该永远不使用using语句和IDisposable接口?在using语句中实现IDisposable或包装代码之前是否给您带来了问题?
谢谢
我会说,using除非文档告诉你不要(如在你的例子中),否则总是使用.
有一个Dispose方法抛出异常而忽略了使用它的意义(双关语).每当我实现它时,无论对象处于什么状态,我总是尽量确保不会抛出任何异常.
PS:这是一个简单的实用方法来补偿WCF的行为.这样可以确保Abort在每个执行路径Close中调用,而不是在调用时调用,并且错误会传递给调用者.
public static void CallSafely<T>(ChannelFactory<T> factory, Action<T> action) where T : class {
var client = (IClientChannel) factory.CreateChannel();
bool success = false;
try {
action((T) client);
client.Close();
success = true;
} finally {
if(!success) {
client.Abort();
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果您在框架中的其他位置发现任何其他有趣的行为案例,您可以提出类似的策略来处理它们.
| 归档时间: |
|
| 查看次数: |
1297 次 |
| 最近记录: |