Ich beschreibe mein Problem in einem einfachen Beispiel und beschreibe dann ein engeres Problem.Parallele Ausführung von Aufgaben in Gruppen
Stellen Sie sich vor Wir haben n Elemente [i1, i2, i3, i4, ..., in] in der Box1 und wir haben eine Box2, die m Elemente verarbeiten kann (m ist normalerweise viel kleiner als n). Die für jedes Element erforderliche Zeit ist unterschiedlich. Ich möchte immer m Job Items machen, bis alle Items bearbeitet sind.
Ein viel engeres Problem ist, dass Sie zum Beispiel eine Liste1 von n Zeichenfolgen (URL-Adressen) von Dateien haben und wir ein System haben wollen, um m Dateien gleichzeitig herunterzuladen (zum Beispiel via httpclient.getAsync() Methode) . Immer wenn das Herunterladen eines der m Elemente beendet wird, muss ein anderes verbleibendes Element von list1 so schnell wie möglich ersetzt werden. Dies muss so lange fortgesetzt werden, bis alle Elemente von List1 ausgeführt wurden. (Anzahl der n und m werden von Benutzern zur Laufzeit angegeben)
Wie kann dies getan werden?
Seine DoWork async ist, und Parallel.ForEach unterstützt async nicht. –
Diese Methode funktioniert nicht in meinem Problem. weil Sie Parallel.ForEach nicht mit asynchronen Methoden verwenden können. Im Fall der Verwendung von Parallel.ForEach mit asynchronen Methoden werden alle Aufgaben sofort ausgelöst (es wartet nicht bis zum Abschluss der asynchronen Aufgaben). Ich verwende HttpClient.getAsync, eine asynchrone Methode. –