繁体   English   中英

如何在C#中创建自定义锁语句?

[英]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注入代码。

NotifyPropertyWeaver

推荐这个问题

什么是IL编织?

您可以使用以下方法之一通过ILWeaving进行此操作

但是我认为在这种情况下,使用@JonSkeet建议的'using'语句将是更简单的解决方案。

那当然是,除非您对学习IL操纵感兴趣。 在这种情况下去吧:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM