私がこれに困惑してからしばらく経ちました。クレイジーなことは、コードの他の領域でこれを数回行ったので、ほぼ完全なコピーアンドペーストですが、このコードが正しく機能していないことを除いてです。だから私はどういうわけか非常に明白な何かを逃しています。
public class RoomCache
{
private ConcurrentDictionary<string, List<string>> _dicOnlineTraders;
ILoggingService _logService = new LoggingService();
public RoomCache()
{
_dicOnlineTraders = new ConcurrentDictionary<string, List<string>>();
}
public void UpdateTraderCurrentRoom(string sRoom, string sTrader)
{
_dicOnlineTraders.AddOrUpdate(sRoom, new List<string>() { sTrader }, (x, y) => UpdateRoomOnlineTraderList(sTrader, y));
}
private List<string> UpdateRoomOnlineTraderList(string sTrader, List<string> aryTraderList)
{
try
{
if (!aryTraderList.Contains(sTrader))
aryTraderList.Add(sTrader);
return aryTraderList;
}
catch (Exception ex)
{
_logService.LogError(ex);
return aryTraderList;
}
}
}
上記のクラスは、次のようにApplication_Start()global.asax.csでインスタンス化されます。
public static RoomCache RoomCache;
RoomCache = new RoomCache();
そのため、ページの読み込みの合間に、UpdateRoomOnlineTraderListが呼び出されたときに、辞書がリストに追加した値を保持していません。ステップスルーすると、リストが表示されます。次にページをロードすると、ページはなくなり、100%ですが、この値を辞書から削除することは他にありません。
辞書がページの読み込み間で値を保持しないのはどうしてですか?キーは保持されますが、値は消えます。私は困惑しています。