我正在填充线程A中的列表并在线程B中对其进行排序.
var SortedListByDistance = Distancelist.OrderBy(o => o._Distance).Where(o => o.Distance <= _Distance).ToList();
Run Code Online (Sandbox Code Playgroud)
现在我收到以下错误:
目标数组不够长.检查destIndex和length,以及数组的下限.
在Google上做一些研究我遇到了"线程安全"主题.基本上列表被锁定(?)在另一个线程中,并触发异常.
至少这是我理解它的方式.现在问题是如何避免这个问题?
实际上,你无法锁定一种List<T>方式,没有人可以在那个时候使用它.但是你可以创建两个代码块,锁定另一个代码块(Mutual Exclusion).所以你可以使用类似的东西
lock(Distancelist) {
var SortedListByDistance = Distancelist.OrderBy(o => o._Distance).Where(o => o.Distance <= _Distance).ToList();
}
Run Code Online (Sandbox Code Playgroud)
您需要在线程A中锁定同一对象,以实现互斥.
PS:由于多种原因,不建议锁定您实际想要使用的对象.更干净的方法是使用另一个对象,object Distancelist_sync = new object()然后用于锁定.