与添加到列表Parallel.ForEach [英] Parallel.ForEach with adding to list
本文介绍了与添加到列表Parallel.ForEach的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我试图运行连接到远程站点(通过网络)的多种功能,并返回一个泛型列表。但我想同时运行它们。
例如:
公共静态列表<&SearchResult中GT;搜索(字符串名称)
{
//初始化一个新的临时表来保存所有的搜索结果
名单,LT;信息搜索结果>结果=新的List<&SearchResult中GT;();
//循环所有供应商同时
Parallel.ForEach(供应商,currentProvider =>
{
名单<信息搜索结果> tmpResults = currentProvider.SearchTitle((标题) );
//添加从目前的供应商
results.AddRange(tmpResults)的结果;
});
//返回所有组合的结果
返回结果;
}
在我看来,多次插入到结果可以在同一happend时间...这可能崩溃我的应用程序。
我怎样才能避免这种情况?
解决方案
//在类范围:
对象lockMe =新的对象();
//在功能
锁(lockMe)
{
results.AddRange(tmpResults);
}
基本上锁定意味着只有一个线程可以访问关键部分同时
I'm trying to run multiple functions that connect to a remote site (by network) and return a generic list. But I want to run them simultaneously.
For example:
public static List<SearchResult> Search(string title)
{
//Initialize a new temp list to hold all search results
List<SearchResult> results = new List<SearchResult>();
//Loop all providers simultaneously
Parallel.ForEach(Providers, currentProvider =>
{
List<SearchResult> tmpResults = currentProvider.SearchTitle((title));
//Add results from current provider
results.AddRange(tmpResults);
});
//Return all combined results
return results;
}
As I see it, multiple insertions to 'results' may happend at the same time... Which may crash my application.
How can I avoid this?
解决方案
//In the class scope:
Object lockMe = new Object();
//In the function
lock (lockMe)
{
results.AddRange(tmpResults);
}
Basically a lock means that only one thread can have access to that critical section at the same time.
这篇关于与添加到列表Parallel.ForEach的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文