[英]C# Thread Static Variables
我有一個靜態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;
當我使用Task.Factory.StartNew從不同線程訪問此文件時,FacilityReposity會被重新創建多次,那么如何避免這種情況。
如果在_facilRepo
初始化之前,多個線程第一次訪問您的屬性,則會發生這種情況。 您必須像這樣鎖定初始化代碼:
private static object _facilRepoLock = new object();
public static FacilityRepository FacilRepo
{
get
{
if (_facilRepo == null)
{
lock (_facilRepoLock)
{
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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.