C#线程静态变量

Weg*_*ged 0 c# static multithreading task

我有一个实现单例模式的静态DataLibrary类.

        public static FacilityRepository FacilRepo
        {
            get
            {
                if (_facilRepo == null)
                {
                    _facilRepo = new FacilityRepository(Authenticated.UserId);
                    if (Authenticated.FacKey.Length > 0)
                    {
                        foreach (var fac in _facilRepo)
                            fac.IsSelected = (fac.FacilityKey == Authenticated.FacKey);                        
                    }
                }
                return _facilRepo;
            }
        }

private static FacilityRepository _facilRepo;
Run Code Online (Sandbox Code Playgroud)

当我使用Task.Factory.StartNew从不同的线程访问它时,FacilityReposity会多次重新创建,我该如何避免这种情况.

Jon*_*eet 9

我不认为你实际上在这里有一个线程局部变量 - 你刚刚遇到了竞争条件,因为你没有正确实现单例模式.

我有一个关于单例模式页面,它提供了一些更好的选择.(特别是,当您使用TPL时,您必须使用.NET 4,因此该Lazy<T>选项绝对是一个竞争者.)