2017-05-15 10 views
-5

こんにちは、私はオブジェクトの大きなリストから情報を取得しようとしています。私は複数のリストから情報を取得し、1つのリストにこの情報を追加することができますどのように並列タスクでリストする新しい項目を追加する方法

List<Foo> Information = new List<Foo>(); 
List<string> SubPaths = getPaths(); //about 10000 
var SplittedList = splitList(SubPaths, 100); //100 list of 100 (100*100=10000) 

foreach(var list in SplittedList) 
{ 
    List<Foo> ProcessedList = DoSomethingWithParallelTasks(list); 
    Information.AddRange(ProcessedList); //when one of all task finished 
} 

Int number = Information.Count()//test: number = 10000 

:これは私のコードです。

通常の方法でリストを処理する場合は、1時間以上かかります。 @マークBaijens

List<Foo> Information = new List<Foo>(); 
    List<string> SubPaths = getPaths(); //about 10000 
     foreach(var path in SubPaths) { 

Information.Add(DoSomethingWithoutParallelTask(path); 

     } 

それは

おかげ時間以上かかります。

+0

質問が不明です。 Fooの1つのリストに文字列のリストを入れたいので、文字列をFooに変換する必要があります。そして、あなたはこのように並行してマルチスレッド化したいのですか? –

+0

私は通常の方法でリストを処理する場合、それは1時間以上かかります。 'リスト情報=新しいリスト(); リスト SubPaths = getPaths(); //およそ10000 foreachの(サブパス内のvarパス) { Information.Add(DoSomethingWithoutParallelTask​​(パス); は} 'それはあなたが何を意味するか –

+0

まだわからない時間以上かかりますが、私はあなたがに見たいかもしれないと思いますあなたが何をしているのか分からなければ、複数の踏み込みが複雑な問題につながる可能性があるので注意してください。 –

答えて

1

このようなことをしたいと思います。マルチ踏みについてはあまりよく分かりませんので、ライブ環境で実装する前にもっと研究しておくことをお勧めします。マルチ踏みは間違った方法でプログラムされていると信頼できないコードにつながる可能性があるからです。

Parallel.ForEach(SubPaths, (currentPath) => { 
    Information.Add(DoSomethingWithoutParallelTask(currentPath); 
}); 
関連する問題