gpt4 book ai didi

c# - 索引超出绑定(bind)异常

转载 作者:太空狗 更新时间:2023-10-30 01:18:43 25 4
gpt4 key购买 nike

我有以下代码,不知何故昨天晚上它抛出了很多异常:

Exception of type 'System.Web.HttpUnhandledException' was thrown. ---> System.IndexOutOfRangeException: Index was outside the bounds of the array. at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)

我只是不明白这是怎么可能的,我检查是否为 null 以及 key 是否可用。这是唯一使用 lastTimeoutCheck 的方法。

private static Dictionary<string, DateTime> lastTimeoutCheck;
private static readonly object CacheLock = new object();
private static void CheckTimeout(string groupName)
{
if (lastTimeoutCheck == null)
{
lastTimeoutCheck = new Dictionary<string, DateTime>();
return;
}
if (!lastTimeoutCheck.ContainsKey(groupName))
{
lastTimeoutCheck.Add(groupName, DateTime.UtcNow);
return;
}

if (lastTimeoutCheck[groupName] <
DateTime.UtcNow.AddMinutes(-GroupConfigSection.TimeOutCheckMinutes))
{
lock (CheckLock)
{
if (lastTimeoutCheck[groupName] <
DateTime.UtcNow.AddMinutes(-GroupConfigSection.TimeOutCheckMinutes))
{
GroupHolder groupHolder =
(GroupHolder) System.Web.HttpContext.Current.Cache.Get(groupName);
if (groupHolder != null)
{
groupHolder.UpdateTime();
}

lastTimeoutCheck[groupName] = DateTime.UtcNow;
}
}
}
}

最佳答案

由于您的变量是 static 并且错误表明它在网络服务器上运行,因此您很可能面临两个线程同时访问相同值的问题,导致两次添加同时。

解决方案取决于您的情况:

  1. 如果您不打算在 session 之间共享字典,请不要将其设为静态。这并不能真正解决问题。它使它更不可能发生;
  2. 使用线程安全字典类型:ConcurrentDictionary .

关于c# - 索引超出绑定(bind)异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26054190/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com