【发布时间】:2012-10-11 06:39:47
【问题描述】:
我创建了一个静态类来保存用户消息,例如“项目成功添加”或“密码成功更改”等。类内部是一个静态字典,其中包含所有消息。字典的键是 UserId。然后我有一个在 _Layout.cshtml 中呈现的 Action,这样即使消息被重定向到页面外,消息也会跟随用户。
例如,我可能允许用户“添加”一个项目,然后一旦成功添加该项目,它将重定向到该项目的列表页面,然后显示消息“项目成功添加”。
这很好,直到我部署到我的生产站点并且我注意到消息“滞后”。我会添加一个项目,然后它会重定向到列表页面,但不会显示该消息。然后,我将导航到应用程序中的其他位置,然后该消息将显示在该页面上。
任何想法为什么会发生这种情况?
这是我的 UserMessageManager 的代码
public static class UserMessageManager
{
private static readonly Dictionary<int, Queue<UserMessage>> UserMessages = new Dictionary<int, Queue<UserMessage>>();
public static void Add(int userId, string message)
{
if (string.IsNullOrWhiteSpace(message))
return;
if (!UserMessages.Keys.Contains(userId))
{
UserMessages.Add(userId, new Queue<UserMessage>());
}
UserMessages[userId].Enqueue(new UserMessage { Message = message});
}
public static List<UserMessage> Get(int userId)
{
if (!UserMessages.Keys.Contains(userId))
{
UserMessages.Add(userId, new Queue<UserMessage>());
}
var messages = new List<UserMessage>();
while (UserMessages[userId].Any())
{
messages.Add(UserMessages[userId].Dequeue());
}
return messages;
}
}
public class UserMessage
{
public string Message { get; set; }
}
编辑:经过一番玩弄之后,消息有时甚至会“聚集”起来。创建几个“项目”后,我将向字典添加一条消息,这些消息会突然在看似随机的时间同时显示。
【问题讨论】:
标签: c# asp.net-mvc dictionary static queue