Die dynamische Zuweisung von tasks zu einer Task-array für die Aufgabe.Factory.ContinueWhenAll zu verarbeiten

Ich habe das Spiel mit den Proben für die Parallele Programmierung mit der .NET Framework liegt hier und lernen eine Menge wirklich große Dinge.

Konkret versuche ich, ein einfaches Programm erstellen, das zieht, in eine Liste von rss-feeds und analysiert dann konkrete Informationen.

In der Lösung, AsyncDownload_CSharp, bietet es eine Reihe von Beispielen, wie zum download asynchron. Ich habe eine ziemlich anständige Verständnis des folgenden code-Abschnitt:

//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();

Den code oben hat die Liste der Aufgaben, die harte code und ich habe versucht, herauszufinden, wie würde ich mich über die Erzeugung, die Liste der Aufgaben, die dynamisch, wo ich weisen Sie den Wert des url zur Laufzeit entweder über eine foreach-Schleife oder eine andere repeat-Schleife.

Dem code kam ich mit zu bauen, die Liste der Aufgaben dynamisch und übergeben es an die Aufgabe.Factory.ContinueWhenAll sieht wie folgt aus:

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();

}

Leider, wenn ich über den debugger nicht nur, ich sehe die Liste mit den Aufgaben errichtet, aber Sie werden nicht Hinzugefügt, um die Liste mit den Aufgaben, aber ich sehe auch, dass Sie ausgeführt wird, bevor Sie an die Aufgabe.Factory.ContinueWhenAll.

Bin ich denk ich benutzen müssen, um einen Lambda-Ausdruck, statt der foreach-Schleife, übergeben diese Aufgabe.Factory.ContinueWhenAll. Leider, ich habe eine harte Zeit, herauszufinden, wie die url für die Aufgabe, die angewendet wird, mit dem Lambda-Ausdruck.

Ich bin mir nicht sicher, ob das, was ich versuche zu tun, ist auch möglich, so dass alle Anregungen, Hinweise, oder Hilfe würde sehr geschätzt werden.

  • da du das Problem gelöst, wie über die Schließung der Frage oder die Antwort darauf und schließen es?
InformationsquelleAutor rise4peace | 2012-01-01
Schreibe einen Kommentar