锁定C#开关箱的最佳方式
我想锁定,这样每个方法锁定C#开关箱的最佳方式,c#,asynchronous,locking,C#,Asynchronous,Locking,我想锁定,这样每个方法swSet和swAdd都可以并行运行,但是锁定swSet使其不与自身并发运行,并且对swAdd 最简单的方法是在每个案例周围放置锁,或者在方法本身中拥有锁,或者拥有[MethodImpl(MethodImplOptions.Synchronized)] 关于该方法 最后一个解决方案会锁定所有方法吗?[MethodImpl(MethodImplOptions.Synchronized)]没有过多的文档记录,但通常会对相同类型的所有此类方法使用相同的锁定对象;: 只有一个线程可
swSet
和swAdd
都可以并行运行,但是锁定swSet
使其不与自身并发运行,并且对swAdd
最简单的方法是在每个案例周围放置锁,或者在方法本身中拥有锁,或者拥有[MethodImpl(MethodImplOptions.Synchronized)]
关于该方法
最后一个解决方案会锁定所有方法吗?[MethodImpl(MethodImplOptions.Synchronized)]
没有过多的文档记录,但通常会对相同类型的所有此类方法使用相同的锁定对象;:
只有一个线程可以在任何实例函数中执行,并且只有一个线程可以在任何类的静态函数中执行
坦率地说,我从来没有发现这个属性有用。在您的情况下,这两种方法似乎需要单独锁定:
internal static void ExecuteCommand(NLO nlo)
{
switch (nlo.action)
{
//synchronize each method in case
case (NLO.Actions.SET):
swSet(nlo);
break;
case (NLO.Actions.ADD):
swAdd(nlo);
break;
default:
throw new System.Exception("Error");
//break;
}
return;
}
[MethodImpl(methodimpoptions.Synchronized)]
没有过多的文档记录,但通常会对相同类型的所有此类方法使用相同的锁对象;:
只有一个线程可以在任何实例函数中执行,并且只有一个线程可以在任何类的静态函数中执行
坦率地说,我从来没有发现这个属性有用。在您的情况下,这两种方法似乎需要单独锁定:
internal static void ExecuteCommand(NLO nlo)
{
switch (nlo.action)
{
//synchronize each method in case
case (NLO.Actions.SET):
swSet(nlo);
break;
case (NLO.Actions.ADD):
swAdd(nlo);
break;
default:
throw new System.Exception("Error");
//break;
}
return;
}