锁定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;
}