关于构造函数的finally...高手来指教

HimeTale 2008-04-16 11:41:15

static clsA()
{
Type myType = typeof(clsA);

try
{
if (!Monitor.TryEnter(myType))
{
Monitor.Enter(myType);
return;
}
}
finally
{
Monitor.Exit(myType);
}
}

以上为异步调用的简单例子,其中类clsA的所有方法均为静态。
finally里的内容如果是成员函数调用前执行,那不是没有锁的意义了?
请教一下调用此类的执行顺序。
...全文
169 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
HimeTale 2008-04-21
  • 打赏
  • 举报
回复
up一下
ojekleen 2008-04-16
  • 打赏
  • 举报
回复
在成员函数调用前finally不一定会执行的,
if (!Monitor.TryEnter(myType))
{
Monitor.Enter(myType);
return;
}
return了就不会finally
叶子 2008-04-16
  • 打赏
  • 举报
回复
友情up
kingmax54212008 2008-04-16
  • 打赏
  • 举报
回复
11
gxj760998 2008-04-16
  • 打赏
  • 举报
回复
finnaly最后还是会执行的。
葡萄爸 2008-04-16
  • 打赏
  • 举报
回复
学习了~~

哈哈
养猪的程序员 2008-04-16
  • 打赏
  • 举报
回复
finally是最后才执行的。
static clsA()
{
Type myType = typeof(clsA);//1

try //2
{
if (!Monitor.TryEnter(myType))
{
Monitor.Enter(myType);
return;
}
}
finally //3
{
Monitor.Exit(myType);
}
}
当上面的程序运行到2的时候,如果有程序要访问该资源,是访问不了的,一定要等上面的代码运行完3后才可以访问。
viki117 2008-04-16
  • 打赏
  • 举报
回复
能先走finally吗?的确很高深
HimeTale 2008-04-16
  • 打赏
  • 举报
回复
finally是一定会走的,不管有没有return
我想明白的是:
如果先走finally,然后再调用,那这个锁操作不是没有用了?

希望了解异步编程的高手指点。
ismezy2002 2008-04-16
  • 打赏
  • 举报
回复
finally不管什么情况下都会执行,即便是return后也会执行,不信的可以DEBUG试试。

LZ的问题我看不太明白。我理解能力不好。

静态类不需要构造。
gomoku 2008-04-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 simplePJlife 的回复:]
finally—异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。

如2楼所言,
return了就不会finally
[/Quote]

Wrong!

finally block WILL be executed.
Fibona 2008-04-16
  • 打赏
  • 举报
回复
finlly就是顺序下来,try{}catch{}finally{},只前前面没有返回就要执行finally{}里面的东东
simplePJlife 2008-04-16
  • 打赏
  • 举报
回复
finally—异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。

如2楼所言,
return了就不会finally

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧