Mic*_*out 22 .net c# multithreading
就线程安全而言,这是可以的,或者我需要使用不同的集合吗?
List<FileMemberEntity> fileInfo = getList();
Parallel.ForEach(fileInfo, fileMember =>
{
//Modify each fileMember
}
Run Code Online (Sandbox Code Playgroud)
Guf*_*ffa 29
只要您只修改传递给方法的项的内容,就不需要锁定.
(当然,前提是列表中没有重复引用,即对同一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
});
Run Code Online (Sandbox Code Playgroud)