gpt4 book ai didi

c# - 在另一个线程中填充的排序列表

转载 作者:太空宇宙 更新时间:2023-11-03 19:59:02 24 4
gpt4 key购买 nike

我在线程 A 中填充一个列表并在线程 B 中对其进行排序。

 var SortedListByDistance = Distancelist.OrderBy(o => o._Distance).Where(o => o.Distance <= _Distance).ToList();

现在我收到以下错误:

Destination array was not long enough. Check destIndex and length, and the array's lower bounds.

在 Google 上做一些研究时,我遇到了“线程安全”主题。基本上列表在另一个线程中被锁定(?)并触发异常。

至少我是这么理解的。现在的问题是我怎样才能避免这个问题?

最佳答案

实际上,您无法锁定 List<T>在某种程度上,那个时候没有人可以使用它。但是您可以创建两个代码块,将另一个代码块锁定(互斥)。所以你可以使用类似的东西

lock(Distancelist) {
var SortedListByDistance = Distancelist.OrderBy(o => o._Distance).Where(o => o.Distance <= _Distance).ToList();
}

您需要在线程 A 中锁定同一个对象,以实现互斥。

PS:出于多种原因,不鼓励锁定您实际想要使用的对象。更简洁的方法是使用另一个对象,例如 object Distancelist_sync = new object()然后用于锁定。

关于c# - 在另一个线程中填充的排序列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30453629/

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