[英]How do i create my custom lock statement in c#?
我想为c#编译器创建我的自定义语句,以生成try finally块。 就像lock语句一样。
例如
private readonly ReaderWriterLockSlim _lockObject
private void MyMethod()
{
MyWriteLock(lockObject)
{
}
}
private void MyMethod2()
{
MyReadLock(lockObject)
{
}
}
编译器应为我生成以下代码
private void MyMethod()
{
try
{
lockObject.EnterWriteLock();
.. statetments for the method
}
finally
{
_lockObject.ExitWriteLock();
}
}
private void MyMethod2()
{
try
{
lockObject.EnterReadLock();
.. statetments for the method
}
finally
{
_lockObject.ExitReadLock();
}
}
您无法在C#中创建自己的语句。 您可以尝试/最接近的方法是using
语句:
using (lockObject.AcquireReadToken())
{
}
其中AcquireReadToken()
将获取一个读取锁,并返回一个IDisposable
,该IDisposable
在处置锁时将其释放。
您应该尝试一下ILWeaving 。 我没有尝试过,但是使用ILWeaving可以完成很多“魔术”。 我使用NotifyPropertyWeaver ,它使用ILWeaving注入代码。
推荐这个问题
您可以使用以下方法之一通过ILWeaving进行此操作
但是我认为在这种情况下,使用@JonSkeet建议的'using'语句将是更简单的解决方案。
那当然是,除非您对学习IL操纵感兴趣。 在这种情况下去吧:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.