Skip to main content
 首页 » 编程设计

c#之使用线程之添加到集合

2024年01月21日31wuhuacong

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

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

请您参考如下方法:

如果您使用的是 .NET 4,我强烈建议您改用并行扩展。例如:

var list = ids.AsParallel() 
              .Select(Work) 
              .ToList(); 

工作是:

public int Work(int id) 
{ 
    ... 
} 

以便它可以适本地接收id。如果你不喜欢方法转换,你可以添加一个 lambda 表达式:

var list = ids.AsParallel() 
              .Select(id => Work(id)) 
              .ToList(); 

无论哪种方式,这都将避免创建比实际需要更多的线程,并处理线程安全方面的事情,而无需您自己管理锁。