C# 已添加具有相同密钥的项。下面的方法正确吗?

C# 已添加具有相同密钥的项。下面的方法正确吗?,c#,multithreading,nhibernate,fluent-nhibernate,sessionfactory,C#,Multithreading,Nhibernate,Fluent Nhibernate,Sessionfactory,我知道这是一篇重复的文章,但我的背景不同。 我从头到尾讨论了这个问题的解决方案。 我知道一些变化如下: private static Mutex _sessionMutex = new Mutex(); public void OpenMySessionFactory(string conStr) { try { _sessionMutex.WaitOne();

我知道这是一篇重复的文章,但我的背景不同。 我从头到尾讨论了这个问题的解决方案。 我知道一些变化如下:

    private static Mutex _sessionMutex = new Mutex();
    public void OpenMySessionFactory(string conStr)
        {
            try
            {
                _sessionMutex.WaitOne();
                config = Fluently.Configure()
                .Database(MySQLConfiguration.Standard.ConnectionString(conStr))
                .Mappings(m => m.FluentMappings.AddFromAssembly(System.Reflection.Assembly.GetExecutingAssembly()))
                .BuildConfiguration();
                sessionFactory = config.BuildSessionFactory();
                _sessionMutex.ReleaseMutex();
            }
            catch (Exception)
            {
                throw;
            }
        }
如果我按上述方式实施,是否有任何影响

错误背后的原因:

已添加具有相同密钥的项


当我双击与使用Fluent NHibernate进行数据访问有关的任何按钮时发生。请注意,如果发生异常,您将永远不会解锁互斥锁(控件将跳转到捕捉块并跳过解锁)。使用
finally
块执行此操作:

public void OpenMySessionFactory(string conStr)
{
    _sessionMutex.WaitOne();
    try
    {
        config = Fluently.Configure()
        .Database(MySQLConfiguration.Standard.ConnectionString(conStr))
        .Mappings(m => m.FluentMappings.AddFromAssembly(System.Reflection.Assembly.GetExecutingAssembly()))
        .BuildConfiguration();
        sessionFactory = config.BuildSessionFactory();
    }
    catch (Exception)
    {
        throw;
    }
    finally
    {
        _sessionMutex.ReleaseMutex();
    }
}