Mientras que el prototipo de prueba de estrés de nuestro nuevo sistema primario, me encuentro con un problema simultáneo con AppFabric Cache. Cuando simultáneamente invoco a muchos DataCache.Get() y Put() con el mismo cacheKey, donde intento almacenar objetos relativamente grandes, recibo "ErrorCode: SubStatus: hay un error temporal. Vuelva a intentarlo más tarde". Es reproducible mediante el siguiente código:Problema de simultaneidad de la caché de AppFabric?
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();
}
Cuando se llama a get() con diferentes tecla o DataCache está sincronizado, no aparecerá este problema. Si DataCache se obtiene con cada llamada de DataCacheFactory (se supone que DataCache es seguro para la ejecución de subprocesos) o si los tiempos de espera se prolongan, no tiene efecto y aún se recibe un error. Me parece muy extraño que MS deje ese error. ¿Alguien se enfrentó a un problema similar?
reintento posterior es un error muy genérico. Intente ver la excepción interna o el subestado de la excepción, que pueden darle una pista de lo que está sucediendo. La excepción aún puede necesitar ser manejada, pero esto por lo menos lo hará racional. – user4444