gpt4 book ai didi

c# - 如何创建一个使用模式如锁的方法?

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

我如何在 C# 中创建类似 lock 的方法

即锁的模式是

lock(inputParam)
{
// code here
}

我想创建一个具有类似使用模式的类似方法,在内部执行括号之间代码前后的一些代码,

SomeFunc(InputParam)
{
// Do some stuff
}

lock 是 C# 中的特例,还是我们可以使用某种 lambda/action dark magic 获得类似的结果?

最佳答案

没有黑魔法。你想要的是 try/finally:

DoSomething();
try
{
// lots of stuff here
}
finally
{
// do other stuff
}

我想您可以编写一个方法来为您完成:

void DoTryFinally(Action start, Action stuff, Action final)
{
start();
try
{
stuff();
}
finally
{
final();
}
}

并调用它:

DoTryFinally(
() => { /* start stuff here */ },
() => { /* stuff here */ },
() => { /* final stuff here */ });

不过,我建议采用第一种方式:try/finally 是 C# 中的常见习惯用法。

顺便说一下,您发布的代码:

lock (someObject)
{
// do stuff
}

实际上只是本质上的简写:

Monitor.Enter(someObject);
try
{
// do stuff
}
finally
{
Monitor.Exit(someObject);
}

编译器在编译 lock 语句时生成它。

编译器中没有内置工具可让您使用任意函数执行此操作。 Dispose pattern接近,但这不是一个通用的解决方案。

关于c# - 如何创建一个使用模式如锁的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24216378/

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