gpt4 book ai didi

c# - 这是一个危险的锁定模式吗?

转载 作者:太空狗 更新时间:2023-10-30 00:12:41 26 4
gpt4 key购买 nike

我有一个用 C# 编写的枚举器,它看起来像这样:

try
{
ReadWriteLock.EnterReadLock();
yield return foo;
yield return bar;
yield return bash;
}
finally
{
if (ReadWriteLock.IsReadLockHeld)
ReadWriteLock.ExitReadLock();
}

我相信这可能是一种危险的锁定模式,因为 ReadWriteLock 只有在枚举完成后才会被释放,否则锁会挂起并且永远不会被释放,我说得对吗?如果是这样,解决这个问题的最佳方法是什么?

最佳答案

不,finally block 将始终执行,几乎除非有人从计算机上拔下插头 (well and a few other exceptions)。

public static IEnumerable<int> GetNumbers() {
try
{
Console.WriteLine("Start");
yield return 1;
yield return 2;
yield return 3;
}
finally
{
Console.WriteLine("Finish");
}
}

...

foreach(int i in GetNumbers()) {
Console.WriteLine(i);
if(i == 2) break;
}

上面的输出将是

Start
1
2
Finish

请注意,在 C# 中,您编写的是 yield return,而不仅仅是 yield。但我想那只是一个错字。

关于c# - 这是一个危险的锁定模式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2956733/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com