Tout en testant le prototype de notre tout nouveau système principal, je rencontre un problème simultané avec AppFabric Cache. En appelant simultanément plusieurs DataCache.Get() et Put() avec le même cacheKey, où j'essaie de stocker un objet relativement volumineux, je reçois "ErrorCode: SubStatus: Il y a un échec temporaire. Veuillez réessayer plus tard." Il est reproductible par le code suivant:Problème de concurrence d'AppFabric Cache?
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();
}
Lorsque vous appelez Get() avec une clé différente ou DataCache est synchronisé, cette question n'apparaît pas. Si DataCache est obtenu avec chaque appel de DataCacheFactory (DataCache est censé être thread-safe) ou si les délais d'attente sont prolongés, il n'a aucun effet et une erreur est toujours reçue. Il me semble très étrange que MS laisserait un tel bug. Quelqu'un at-il fait face à un problème similaire?
Retry plus tard est une erreur très générique. Essayez de regarder l'exécution interne ou le sous-statut de l'exception, qui peut vous donner une idée de ce qui se passe. L'exception peut encore avoir besoin d'être gérée mais cela la rendra au moins rationnelle. – user4444