使用线程 - 添加到集合

Rya*_*yan 1 c# multithreading

List<int> data=new List<int>();
foreach(int id in ids){
    var myThread=new Thread(new ThreadStart(Work));
    myThread.Start(id);
}


Work(){
}
Run Code Online (Sandbox Code Playgroud)

Method Work对收到的id进行一些处理,然后将结果添加到数据列表中?如何从每个线程向集合中添加数据?我的代码怎么样?谢谢

Jon*_*eet 8

如果您使用的是.NET 4,我强烈建议您使用Parallel Extensions.例如:

var list = ids.AsParallel()
              .Select(Work)
              .ToList();
Run Code Online (Sandbox Code Playgroud)

在哪里Work:

public int Work(int id)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

这样它就可以得到id适当的.如果您不热衷于方法转换,可以添加lambda表达式:

var list = ids.AsParallel()
              .Select(id => Work(id))
              .ToList();
Run Code Online (Sandbox Code Playgroud)

无论哪种方式,这将避免创建比您真正需要的更多的线程,并且无需您自己管理锁定就可以处理线程安全方面的问题.