Estoy tratando de volver a escribir un código usando el Diccionario para usar ConcurrentDictionary. He revisado algunos ejemplos, pero todavía tengo problemas para implementar la función AddOrUpdate. Este es el código original:
dynamic a = HttpContext;
Dictionary<int, string> userDic = this.HttpContext.Application["UserSessionList"] as Dictionary<int, String>;
if (userDic != null)
{
if (useDic.ContainsKey(authUser.UserId))
{
userDic.Remove(authUser.UserId);
}
}
else
{
userDic = new Dictionary<int,string>();
}
userDic.Add(authUser.UserId, a.Session.SessionID.ToString());
this.HttpContext.Application["UserDic"] = userDic;
No sé qué agregar para la parte de actualización:
userDic.AddOrUpdate(authUser.UserId,
a.Session.SessionID.ToString(),
/*** what to add here? ***/);
Cualquier indicador sería apreciada.
c#
concurrent-collections
usuario438331
fuente
fuente
Espero no haberme perdido nada en tu pregunta, pero ¿por qué no así? Es más fácil, atómico y seguro para subprocesos (ver más abajo).
(Ver: http://blogs.msdn.com/b/pfxteam/archive/2010/01/08/9945809.aspx )
El indexador también es atómico. Si pasa una función en su lugar, es posible que no sea:
Ver: http://blogs.msdn.com/b/pfxteam/archive/2010/01/08/9945809.aspx
fuente
Terminé implementando un método de extensión:
fuente
Para aquellos que estén interesados, actualmente estoy implementando un caso que es un gran ejemplo para usar el "oldValue" también conocido como valor existente en lugar de forzar uno nuevo (personalmente no me gusta el término "oldValue" ya que no es tan antiguo cuando se creó hace unos pocos pasos de procesador desde dentro de un hilo paralelo).
fuente
GetOrAdd()
en lugar msdn.microsoft.com/en-us/library/ee378674(v=vs.110).aspx