私は並列プログラミングに不慣れであり、実際、これは私がそれを試すのは初めてです。私は現在.NET4でプロジェクトを行っており、4つまたは5つの並列実行を希望しています。
いくつかのオプションがあります。ありますTask.Factory.StartNew
Parallel.For
Parallel.ForEach
など。
私がやろうとしているのは、Webサイトに投稿し、約200のURLの応答を取得することです。
私が使用したときParallel.ForEach
、スレッドの数を制御する方法が見つかりませんでした。アプリケーションは130以上のスレッドを使用し、Webサイトは応答しなくなりました:)
Task.Factory.StartNew
forループ内で使用し、URLを4つまたは5つのタスクに分割することに興味があります。
List<Task> tasks = new List<Task>();
for (int i = 0; i < 5; i++)
{
List<string> UrlForTask = GetUrlsForTask(i,5); //Lets say will return some thing like 1 of 5 of the list of URLs
int j = i;
var t = Task.Factory.StartNew(() =>
{
List<PageSummary> t = GetSummary(UrlForTask);
Summary.AddRange(t); //Summary is a public variable
}
tasks.Add(t);
}
これらのタスクは、スレッドに要約されると思います。Summary
それで、私List<PageSummary>
がそれをスレッドセーフにする場合(複数のスレッドによる共有変数へのアクセスに問題があることを理解しています)?
これは私たちが使うべき場所ConcurrentQueue<T>
ですか?
複数のタスクなどによる共有変数へのアクセスと更新について学ぶのに役立つ優れたリソースを知っていますか?
あなたが思うかもしれないように、私がこのタイプのタスクに使用できる最良の方法は何ですか?