Я играл с примерами параллельного программирования на .NET Framework, расположенном здесь 1002 *, и изучал кучу действительно замечательных вещей.
В частности, я пытаюсь создать простую программу, которая извлекает список каналов 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();
Приведенный выше код содержит список жесткого кода Задачи, и я пытался выяснить, как мне будет динамически генерировать этот список Задач, когда я присваиваю значение url во время выполнения либо через цикл foreach, либо каким-либо другим способом. повторить цикл.
Код, который я придумал для динамического построения списка задач и передачи его в Task.Factory.ContinueWhen, все выглядит так:
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.
Я думаю, что мне нужно использовать лямбда-выражение вместо цикла foreach, чтобы передать каждое из них в Task.Factory.ContinueWhenAll. К сожалению, мне сложно понять, как URL-адрес для этой задачи применяется с помощью лямбда-выражения.
Я не уверен, что то, что я пытаюсь сделать, возможно, поэтому любые предложения, указатели или помощь будут с благодарностью.