我只是想知道return在using块内调用它是安全/好的方法.
对于前者
using(var scope = new TransactionScope())
{
// my core logic
return true; // if condition met else
return false;
scope.Complete();
}
Run Code Online (Sandbox Code Playgroud)
我们知道最后一个大括号 dispose()将被取消.但是在上面的情况下,由于return将控件跳出给定范围(AFAIK)......
scope.Complete()被叫了吗?dispose()方法也是如此.Øyv*_*hen 123
return在using块内调用是完全安全的,因为使用块只是一个try/finally块.
在上面的示例中,返回后true,范围将被处理并返回值.return false,并且scope.Complete()将不会被调用.Dispose然而将被调用,因为它驻留在finally块内.
您的代码与此基本相同(如果这样可以更容易理解):
var scope = new TransactionScope())
try
{
// my core logic
return true; // if condition met else
return false;
scope.Complete();
}
finally
{
if( scope != null)
((IDisposable)scope).Dispose();
}
Run Code Online (Sandbox Code Playgroud)
请注意,您的交易永远不会提交,因为没有办法scope.Complete()提交交易.
这很好 - finally子句(这是该using子句的结束大括号所做的)总是在保留范围时执行,无论如何.
但是,这仅适用于finally块中的语句(使用时无法显式设置using).因此,在您的示例中,scope.Complete()永远不会被调用(我希望编译器警告您有关无法访问的代码).
| 归档时间: |
|
| 查看次数: |
28081 次 |
| 最近记录: |