4
|
Fake Code Monkey Rashid · 技术社区 · 16 年前 |
![]() |
1
13
你的问题是
正在执行,另一个线程更改
[编辑]
正如埃里克指出的,另一个问题
|
![]() |
2
5
你的锁定方案被破坏了。你需要锁上
|
![]() |
3
5
在看到您的异常之后,我发现foo.requests在构造浅拷贝时正在被更改。把它改成这样:
不是问题,但是…尽管如此,我还是有点怀疑你到底想要什么。如果新请求在处理过程中传入,那么当foreach循环终止时,它们将不会被处理。因为我很无聊,我认为你正在努力实现以下目标:
还有一些问题,我将留给读者:
|
![]() |
4
2
说实话,我建议重构一下。您正在从对象中删除项,同时还要对其进行迭代。在处理完所有项之前,循环实际上可以退出。 |
![]() |
5
2
三件事:
有关详细信息,请检查:
|
![]() |
6
2
问题是表达式
前臂里面,因为它没有锁。我假设当.NET将您的请求集合复制到一个新列表中时,该列表被另一个线程修改。 |
![]() |
7
1
假设有两个线程在执行此代码。
您的锁定方案错误。在for循环示例中甚至是错误的。 每次访问共享资源时都需要锁定,甚至读取或复制共享资源。这并不意味着整个操作都需要锁定。这确实意味着共享此共享资源的每个人都需要参与锁定方案。 还要考虑防御性复制:
即便如此,所有共享foo.request的人都必须参与锁定方案。 |
![]() |
8
0
在遍历列表时,您正在尝试从列表中删除对象。(好吧,从技术上讲,你不是这样做的,但这是你想要达到的目标)。 以下是正确操作的方法:在迭代时,构造另一个要删除的条目列表。只需构造另一个(临时)列表,将要从原始列表中删除的所有条目放入临时列表。
使用列表类的“removeall”方法。 |
![]() |
9
0
我知道这不是你要求的,只是为了我自己的理智,以下是否代表了你的代码的意图:
|
![]() |
Dave · 如何在for循环中修改列表值 6 月前 |
![]() |
BlurKid · R中for循环时结果的奇怪差异 7 月前 |
![]() |
Rudraksh_pd · 取炭。通过char。c中创建字符串的输入 8 月前 |
![]() |
Mtullis · 在我的表单值中循环遍历数组[重复] 8 月前 |
![]() |
xhamsterIT · 循环VBA Microsoft Excel 1 年前 |