gpt4 book ai didi

c# - 如何在不弄乱缩进的情况下在 VS2012 中获取多个锁

转载 作者:太空宇宙 更新时间:2023-11-03 23:48:04 25 4
gpt4 key购买 nike

这看起来是个愚蠢的问题,但我找不到解决方案。

我的问题是 C# 不允许在单个 lock 语句中获取多个锁。这行不通:

lock (a, b, c, d)
{
// ...
}

相反,它似乎需要大量的缩进才能做到这一点:

lock (a)
lock (b)
lock (c)
lock (d)
{
// ...
}

再加上代码已经存在的所有其他缩进级别(命名空间、类、方法、条件、循环……),这变得很疯狂。因此,我想使用这种格式:

lock (a) lock (b) lock (c) lock (d)
{
// ...
}

并保持我的理智。但是 Visual Studio(我使用的是 2012)不会听说它。一旦我输入任何右大括号,上面的内容就会变成一些愚蠢的东西,比如:

lock (a) lock (b) lock (c) lock (d)
{
// ...
}

而且我似乎无能为力。有什么方法可以使它起作用吗?

最佳答案

只是一个想法:-)

static class LockAndExecute
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
static void _gen(Action a, object[] objs, int i = 0){

bool lockWasTaken = false;
var temp = objs[i];
try {
Monitor.Enter(temp, ref lockWasTaken);
if(i + 1 >= objs.Length)
a();
else
_gen(a, objs, i + 1);
}
finally
{
if (lockWasTaken)
Monitor.Exit(temp);
}
}

public static void Do(object[] objectsToLock, Action action){
_gen(action, objectsToLock);
}
}

和用法;

LockAndExecute.Do(new[]{a, b}, () => {
Console.WriteLine("Eww!");
});

关于c# - 如何在不弄乱缩进的情况下在 VS2012 中获取多个锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26896253/

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