gpt4 book ai didi

c# - List 上的 Parallel.ForEach 线程安全
转载 作者:IT王子 更新时间:2023-10-29 04:33:36 28 4
gpt4 key购买 nike

就线程安全而言,可以这样做还是我需要使用不同的集合?

        List<FileMemberEntity> fileInfo = getList(); 

Parallel.ForEach(fileInfo, fileMember =>
{
//Modify each fileMember
}

最佳答案

只要您只是修改传递给方法的项目的内容,就不需要锁定。

(当然前提是列表中没有重复引用,即对同一 FileMemberEntity 实例的两个引用。)

如果需要修改列表本身,创建一个可以迭代的副本,修改列表时使用锁:

List<FileMemberEntity> fileInfo = getList();

List<FileMemberEntity> copy = new List<FileMemberEntity>(fileInfo);
object sync = new Object();

Parallel.ForEach(copy, fileMember => {
// do something
lock (sync) {
// here you can add or remove items from the fileInfo list
}
// do something
});

关于c# - List<Object> 上的 Parallel.ForEach 线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11232167/

28 4 0