私は、.NET Frameworkで並列プログラミングのサンプルをhereに配置し、本当に素晴らしいことを学びました。Task.Factory.ContinueWhenAllのタスク配列にタスクを動的に割り当てる
具体的には、RSSフィードのリストを取得して特定の情報を解析する簡単なプログラムを作成しようとしています。
解決策では、AsyncDownload_CSharpをダウンロードすると、非同期でダウンロードする方法の例がいくつか提供されています。私は以下のコードのかなりまともな理解を持っている:
// Concurrent async requests
Task.Factory.ContinueWhenAll(new []
{
Download("http://blogs.msdn.com/pfxteam"),
Download("http://blogs.msdn.com/nativeconcurrency"),
Download("http://exampleexampleexample.com"), // will fail
Download("http://msdn.com/concurrency"),
Download("http://bing.com")
}, ConcurrentTasksCompleted).Wait();
上記のコードはタスクハードコードのリストを持っていると私は私はそのリストを生成するに行くか方法を把握しようとしてきました私は、実行時にforeachループや他の繰り返しループのいずれかを使ってurlの値を割り当てます。
私は動的にタスクのリストを作成し、Task.Factory.ContinueWhenAllにそれを渡すことを思い付いたコードは次のようになります。私は、デバッガをステップ実行するとき
がprivate void btnFeeds_Click(object sender, EventArgs e)
{
string[] urls = new[] { "http://blogs.msdn.com/pfxteam", "http://msdn.com/concurrency", "http://bing.com" };
List<Task<string>> tasks = new List<Task<string>>();
foreach (string url in urls)
{
tasks.Add(Download(url));
}
Task.Factory.ContinueWhenAll(tasks, ConcurrentTasksCompleted).Wait();
}
残念ながら、私だけを行いますタスクリストはビルド中ですが、タスクリストに追加されていますが、Task.Factory.ContinueWhenAllに渡される前に実行されていることも確認できます。
私は、これらのそれぞれをTask.Factory.ContinueWhenAllに渡すために、foreachループではなくラムダ式を使用する必要があると考えています。残念ながら、ラムダ式を使用してタスクのURLがどのように適用されているかを調べるのは苦労しています。
私がやろうとしていることが可能なのかどうか分からないので、提案や指摘、助けがあれば大歓迎です。 DownLoad(url)
を使用してタスクオブジェクトを作成しているため、
でコードを確認することができ、どのように質問を閉じたり、それに答えて、それを閉じてはどうですか? – Noctis