Ich programmiere ein Spiel der Unity Engine und ich bin derzeit in das folgende Problem:Vergleichen Parameter mehrerer Rückrufe
ich eine Methode, die sein Ergebnis asynchron die Parameter einer Callback-Funktion zurückgibt. Ziemlich einfach, sieht es so aus:
public void CalculateSomething(- PARAMETERS - , Action<float> callback)
Ich muss diese Methode in einer Schleife für verschiedene Parameter aufrufen.
foreach(float f in manyFloats){
CalculateSomething(f, myCallback);
}
void myCallback(float f){
...compare this result value to the other values?...
}
Nun möchte Ich mag den resultierenden Schwimmer vergleichen, die mit den verschiedenen Rückrufen kommen. Sagen wir einfach, ich möchte den höchsten Wert unter diesen Floats finden. Wie mache ich das?
Ich hatte die Idee, die Ergebnisse in einem Array-Feld zu speichern und nur zu vergleichen, nachdem es voll ist, aber ich weiß nicht, wie man überprüft, ob alle Rückrufe bereits erledigt sind.
Idealerweise möchte ich es vermeiden, meine Klasse mit einem Feld wie diesem zu verschmutzen, aber es wäre in Ordnung, wenn es keinen anderen Weg gäbe. Die CalculateSomething
Funktion ist Teil einer Bibliothek, also kann ich sie nicht ändern. Alles andere ist variabel.
benötigen Sie die Rückrufkonfiguration, die Sie jetzt haben? Mit diesem Beispielcode scheint es am einfachsten zu sein, einen Wert von 'CalculateSomething' zurückzugeben, um ihn einer Liste hinzuzufügen, und Sie können Werte nach der Schleife vergleichen. – Jonesopolis
Das 'CalculateSomething' stammt aus einer anderen Bibliothek, das muss also bleiben. Alles andere könnte geändert werden. Über Ihren Vorschlag: Woher weiß ich, wenn die Liste gefüllt ist? Wie überprüfe ich, ob jeder Rückruf bereits beendet ist? Könnte ich das tun, ohne meine Klasse zu verschmutzen? Edit: Whoops, das sollte nicht schon gesendet werden ... – MaXL130