엔터프라이즈 라이브러리의 문서는 말한다 :내 IBackingStore는 스레드로부터 안전해야합니까?
때문에 캐시 개체가 어떤 백업 저장소가 단일 스레드 방식으로 호출 할 것이다, 당신이 보장의 작동 방식의. 이 은 구현 스레드를 안전하게 만들 필요가 없음을 의미합니다.
그리고 CacheManager에 관하여 :
CacheManager 객체를 통해 만들어진 모든 메서드 호출이 스레드 안전합니다.
그러나 간단한 테스트는 반대로 증명 : 여기
내 사용자 지정 백업 저장소입니다 여기에 같은 CacheManager에 테스트 느릅 나무 접속되어public class MyStore : IBackingStore
{
volatile bool isEntered = false;
#region IBackingStore Members
public void Add(CacheItem newCacheItem)
{
if(isEntered)
throw new NotImplementedException();
isEntered = true;
Thread.Sleep(1000);
isEntered = false;
}
public int Count
{
get
{
throw new NotImplementedException();
}
}
public void Flush()
{
throw new NotImplementedException();
}
public System.Collections.Hashtable Load()
{
return new System.Collections.Hashtable();
}
public void Remove(string key)
{
throw new NotImplementedException();
}
public void UpdateLastAccessedTime(string key, DateTime timestamp)
{
throw new NotImplementedException();
}
#endregion
#region IDisposable Members
public void Dispose()
{
throw new NotImplementedException();
}
#endregion
}
(만 추가 방법은 관련) 그리고 추가 방법은 becau (서로 다른 두 가지 스레드에서 두 번 실행
DictionaryConfigurationSource configSource = new DictionaryConfigurationSource();
CacheManagerSettings cacheSettings = new CacheManagerSettings();
configSource.Add(CacheManagerSettings.SectionName, cacheSettings);
CacheStorageData storageConfig = new CacheStorageData("MyStorage", typeof(MyStore));
cacheSettings.BackingStores.Add(storageConfig);
CacheManagerData cacheManagerData = new CacheManagerData("CustomCache", 120, 100, 5, storageConfig.Name);
cacheSettings.CacheManagers.Add(cacheManagerData);
cacheSettings.DefaultCacheManager = cacheManagerData.Name;
CacheManagerFactory cacheFactory = new CacheManagerFactory(configSource);
ICacheManager cacheManager = cacheFactory.CreateDefault();
Thread thread = new Thread(() =>
{
cacheManager.Add("item1", "odaiu");
});
thread.Start();
cacheManager.Add("item2", "dzaoiudoiza");
: 서로 다른 두 가지 스레드를 통해 그것은 Add 메소드의 "NotImplementedException"을 던집니다.
내 코드에 문제가 있거나 엔터프라이즈 라이브러리의 설명서가 잘못 되었습니까?