大 C# 列表的问题,列表不可访问
Problems with big C# list, list is inaccessible
每次我对一个大于1000的列表做List.add,我就有机会得到(集合被修改;枚举操作可能不会执行)。如果我增加尺寸,问题会更频繁地发生。我有很多线程制作信息缓存,用户通过一个控制器 ActionResult JSON.
获取 MVC5 上的信息
public static List<int> list = new List<int>();
public ActionResult Index()
{
new Thread(() => {
for (var a = 0; a < 10000000000; a++)
{
Thread.Sleep(50);
lock (list)
{
list.Add(1);
list.Add(1);
}
}
}).Start();
return View();
}
public ActionResult Index2()
{
return Json(new { Response = new { Id = 0, Url = list } },
JsonRequestBehavior.AllowGet);
}
无论何时访问变量,都必须锁定它。这样做:
public ActionResult Index2()
{
lock(list) {
return Json(new { Response = new { Id = 0, Url = list } },
JsonRequestBehavior.AllowGet);
}
}
每次我对一个大于1000的列表做List.add,我就有机会得到(集合被修改;枚举操作可能不会执行)。如果我增加尺寸,问题会更频繁地发生。我有很多线程制作信息缓存,用户通过一个控制器 ActionResult JSON.
获取 MVC5 上的信息 public static List<int> list = new List<int>();
public ActionResult Index()
{
new Thread(() => {
for (var a = 0; a < 10000000000; a++)
{
Thread.Sleep(50);
lock (list)
{
list.Add(1);
list.Add(1);
}
}
}).Start();
return View();
}
public ActionResult Index2()
{
return Json(new { Response = new { Id = 0, Url = list } },
JsonRequestBehavior.AllowGet);
}
无论何时访问变量,都必须锁定它。这样做:
public ActionResult Index2()
{
lock(list) {
return Json(new { Response = new { Id = 0, Url = list } },
JsonRequestBehavior.AllowGet);
}
}