Проблема параллелизма AppFabric Cache?

Во время стресс-тестирования прототипа нашей новой основной системы я столкнулся с параллельной проблемой с 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 оставила такой баг. Кто-нибудь сталкивался с подобной проблемой?

7
задан Frantisek Jandos 28 July 2011 в 13:12
поделиться