Saya mencoba menulis ulang beberapa kode menggunakan Dictionary untuk menggunakan ConcurrentDictionary. Saya telah meninjau beberapa contoh tetapi saya masih mengalami masalah dalam menerapkan fungsi AddOrUpdate. Ini adalah kode aslinya:
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;
Saya tidak tahu apa yang harus ditambahkan untuk bagian pembaruan:
userDic.AddOrUpdate(authUser.UserId,
a.Session.SessionID.ToString(),
/*** what to add here? ***/);
Setiap petunjuk akan dihargai.
c#
concurrent-collections
pengguna438331
sumber
sumber
Saya harap, saya tidak melewatkan apa pun dalam pertanyaan Anda, tetapi mengapa tidak seperti ini saja? Lebih mudah, atomic dan thread-safe (lihat di bawah).
(Lihat: http://blogs.msdn.com/b/pfxteam/archive/2010/01/08/9945809.aspx )
Pengindeks juga bersifat atomik. Jika Anda meneruskan suatu fungsi, itu mungkin bukan:
Lihat: http://blogs.msdn.com/b/pfxteam/archive/2010/01/08/9945809.aspx
sumber
Saya akhirnya menerapkan metode ekstensi:
sumber
Bagi mereka yang tertarik, saat ini saya mengimplementasikan kasus yang merupakan contoh bagus untuk menggunakan "oldValue" alias nilai yang ada alih-alih memaksakan yang baru (secara pribadi saya tidak suka istilah "oldValue" karena bukan itu lama ketika dibuat hanya beberapa kutu prosesor yang lalu dari dalam utas paralel).
sumber
GetOrAdd()
bukan msdn.microsoft.com/en-us/library/ee378674(v=vs.110).aspx