Lea*_*ner 2 c# exception-handling using
在我学习的过程中,我偶然发现了这段代码.我在这里找到一个观察,即使作者正在使用"使用"块并创建"ts"对象,他在使用块内部使用try catch块,在catch部分中,他将对象"ts"显式调用Dispose方法.我觉得没必要.我不明白为什么他需要尝试并抓住这里,如果他必须"只处理对象".
我的问题:
我们真的需要尝试抓住这里吗?在什么情况下,它将在这个例子中起作用?
使用"使用"块时,这种方式是否正确?它在GC过程中如何反应?它的开销对吗?
感谢两个问题是否可以以初学者可以理解的方式解释.
using (TransactionScope ts = new TransactionScope(TransactionScopeOption.RequiresNew))
{
try
{
ServiceReference1.Service1Client obj = new ServiceReference1.Service1Client();
obj.UpdateData();
ServiceReference2.Service1Client obj1 = new ServiceReference2.Service1Client();
obj1.UpdateData();
ts.Complete();
}
catch (Exception ex)
{
ts.Dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
这对我来说当然没必要.该using语句将编译为finally包装整个代码块的块,无论是否抛出异常,都将执行该块.
基本上,他写的是:
TransactionScope ts;
try
{
ts = new TransactionScope(TransactionScopeOption.RequiresNew);
try
{
ServiceReference1.Service1Client obj = new ServiceReference1.Service1Client();
obj.UpdateData();
ServiceReference2.Service1Client obj1 = new ServiceReference2.Service1Client();
obj1.UpdateData();
ts.Complete();
}
catch (Exception ex)
{
ts.Dispose();
}
}
finally
{
ts.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
哪个有点傻.这是特别傻,他是完全无视(或"吞咽")除外.99.99999993%的时间,这是一个坏主意.
| 归档时间: |
|
| 查看次数: |
226 次 |
| 最近记录: |