Was ich letztlich zu erreichen versuche, ist das HTML von einer unbekannten, aber begrenzten Anzahl von Webseiten zu bekommen, wo GetPage(i)
das HTML für Seite i
zurückgibt und ich aufhören will, sobald ich eine Nicht-Seite gefunden habe.Wie implementiere ich dieses parallele Muster in C#?
Das genaue Muster, das ich für gehe ist wie folgt:
- starten
N
parallele Aufgaben, dieGetPage(0)
, ... sind,GetPage(N-1)
. - Sobald eine Aufgabe
GetPage(i)
abgeschlossen ist, wenn die Aufgabe die Seite abrufen konnte, fügen Sie sie zu einer Sammlung von Seiten hinzu und versuchen Sie, die nächste größte Seite zu erhalten, die noch nicht versucht wurde, verarbeitet zu werden; oder wenn die Aufgabe die Seite nicht abrufen konnte, alle AufgabenGetPage(j)
woj>i
abbrechen.
Also meine versuchte Implementierung ist wie
var docs = new LinkedList<HtmlDocument>();
int tlimit = 20;
var tasks = new Task<HtmlDocument>[tlimit];
for(int i = 0; i < tlimit; ++i)
{
tasks[i] = Task<HtmlDocument>.Factory.StartNew(() => BoardScanner.GetBoardPage(i));
}
/// ???
Ich sehe keine Parallelität in Ihrer Beschreibung. "Sobald eine Aufgabe GetPage (i) abgeschlossen ist, wenn die Aufgabe die Seite abrufen konnte, fügen Sie sie zu einer Sammlung von Seiten hinzu und versuchen Sie, die nächste größte Seite zu erhalten, die noch nicht verarbeitet wurde" sequentielle Behandlung von Seiten. Sie können den gesamten Prozess jedoch asynchron durchführen. – agfc