我正在读一本关于并行编程的书,它说它不是线程保存,不使用锁而将元素添加到列表中,因为结果将是不可预测的.例如,如果我们必须将800,000个元素添加到列表中,则最终结果将少于800 000个元素.
现在我想知道是否是线程保存从列表中读取元素.例如,假设我有一个列表BlackListedNumbers
List<int> BlackListedNumbers = new List<int> {10, 50 ....... n};
//lets say there is 500 000 elements in the list
Run Code Online (Sandbox Code Playgroud)
和另一个Numbers包含10 000 000个数字的列表,显然我将使用parallel.Foreach来完成这个任务,我想要的是Final包含所有数字Numbers的BlackListedNumbers列表不在列表中
List<int> finalList = new List<int>();
Parallel.ForEach(Numbrs,
num =>
{
if (!blackListedNumbrs.Contains(num))
{
lock (finalList)
{
finalList.Add(num);
}
}
});
Run Code Online (Sandbox Code Playgroud)
我知道这不是完成这项工作的最有效方法,但我只是想说明问题.
所以我的问题是:是否保存线程以从List中读取结果blackListedNumbrs并获得100%准确的结果?