我如何在 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/