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进行一些处理,然后将结果添加到数据列表中?如何从每个线程向集合中添加数据?我的代码怎么样?谢谢
如果您使用的是.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)
无论哪种方式,这将避免创建比您真正需要的更多的线程,并且无需您自己管理锁定就可以处理线程安全方面的问题.
| 归档时间: |
|
| 查看次数: |
1396 次 |
| 最近记录: |