srvr4vr Asked:2020-08-22 18:42:17 +0000 UTC2020-08-22 18:42:17 +0000 UTC 2020-08-22 18:42:17 +0000 UTC Task.IsComplited 在任务实际完成之前 772 我创建了一堆Task- 在每个游戏循环中,将它们放入List<Task>: GamesList.Add(gp.ContinueWith(t=>GamesList.Remove(t))); 但是由于某种原因,它们在游戏周期完成之前就从列表中删除了——游戏仍然运行顺利。什么? c# 1 个回答 Voted Best Answer VladD 2020-08-22T18:59:54Z2020-08-22T18:59:54Z 问题是您将要删除的错误任务添加到列表中。 ContinueWith返回一个新任务,并且您正在尝试删除原始任务。 是的,您不应该在没有阻塞的情况下对来自不同线程的列表进行操作。嗯,也就是说,你可以,但不要对丢失的数据感到惊讶。 尝试用GamesList线程安全的集合替换它,并使用 GamesList.Add(gp); gp.ContinueWith(t=>GamesList.Remove(t));
问题是您将要删除的错误任务添加到列表中。
ContinueWith返回一个新任务,并且您正在尝试删除原始任务。是的,您不应该在没有阻塞的情况下对来自不同线程的列表进行操作。嗯,也就是说,你可以,但不要对丢失的数据感到惊讶。
尝试用
GamesList线程安全的集合替换它,并使用