2017-05-10 1 views
-1

Ich habe eine Frage zu Nebenläufigkeit in C#. Ich habe 3 Aufgaben A, B, C und ich bin mitAsynchrone Tasks und eine Utility-Funktion parallel ausführen

task.WhenAll(A,B,C) erwarten sie parallel laufen zu lassen und dann ihre Ergebnisse wie folgt aus:

var aresult = A.Result; 
var bresult = B.Result; 
var cResult = C.Result; 

Kürzlich muss ich eine Nutzenfunktion hinzufügen, die verwendet cResults und einen Wert wie folgt zurück: (diese Funktion ist nicht Asynchron-Methode)

var sortedResult = SortResult(cResult); 

ich diese knoweldege habe, dass die Aufgabe A und B viel länger dauern als Aufgabe C und möchte den Prozess und Aufgaben optimieren (A und B) und (C und die sortierten Ergebnisse (cResults)) läuft parallel Ich benutze also die gleiche Zeit, die für A und B länger dauert, um C und sortedResults (cResult) zu verarbeiten. Wie kann ich das machen?

Sorry für lange Post und ich freue mich über jede Hilfe.

Antwort

1

await task.WhenAll(A,B,C)nicht Aufgaben parallel ausführen. Was es tut es dauert 3 bereits ausgeführten Aufgaben und stellt sicher, dass die Methode weiterhin ausgeführt wird, wenn sie alle fertig sind. Sie haben bereits gestartet, um die Aufgaben parallel nur durch Erstellen A, B und C (vermutlich durch den Aufruf einer asynchronen Methode) zu starten.

Also, wenn die Semantik, die Sie wollen, A B und C zu starten, dann tun Sie etwas, wenn C fertig ist, dann etwas anderes tun, wenn A und B fertig sind, dann schreibe einfach jede dieser Operationen. Das Starten von A, B und C ist so einfach wie das Aufrufen der 3 asynchronen Methoden. Etwas nach abzuschließen ist so einfach wie das Warten auf C, und etwas nach A und B zu erledigen ist so einfach wie das Warten auf A und B (oder Task.WhenAll und mit diesen beiden Aufgaben würde es die gleiche Wirkung haben).

+0

was ich will ist, dass die Aufgaben A, B parallel zu Task C und sortResult (cResult) läuft –

+0

@pojroj Und die Sequenz, die ich beschrieben, würde das erreichen. – Servy

Verwandte Themen