Во время стресс-тестирования прототипа нашей совершенно новой основной системы я столкнулся с параллельной проблемой с AppFabric Cache. При одновременном вызове многих DataCache.Get() и Put() с одним и тем же cacheKey, где я пытаюсь сохранить относительно большой объект, я получаю "ErrorCode:SubStatus:Временный сбой. Повторите попытку позже". Воспроизводится следующим кодом:
var dcfc = new DataCacheFactoryConfiguration
{
Servers = new[] {new DataCacheServerEndpoint("localhost", 22233)},
SecurityProperties = new DataCacheSecurity(DataCacheSecurityMode.None, DataCacheProtectionLevel.None),
};
var dcf = new DataCacheFactory(dcfc);
var dc = dcf.GetDefaultCache();
const string key = "a";
var value = new int [256 * 1024]; // 1MB
for (int i = 0; i < 300; i++)
{
var putT = new Thread(() => dc.Put(key, value));
putT.Start();
var getT = new Thread(() => dc.Get(key));
getT.Start();
}
При вызове Get() с другим ключом или синхронизации DataCache эта проблема не появится. Если DataCache получается с каждым вызовом из DataCacheFactory (предполагается, что DataCache является потокобезопасным) или тайм-ауты продлеваются, это не имеет никакого эффекта, и по-прежнему принимается ошибка. Мне кажется очень странным, что MS оставила бы такой баг. Кто-нибудь сталкивался с подобной проблемой?