2017-05-20 4 views
-1

Ich habe mehrere Funktionen, die auf Remote-Ressource angewiesen sind, um ein Ergebnis zurückzugeben. Diese Remote-Ressource hat viele Fehler oder unerwartete Reaktionen, die ich nicht ändern kann. Es gibt eine Reihe von Funktionen, die jeweils von den Ergebnissen der vorherigen Funktion abhängen. Die Logik jeder Funktion ist unterschiedlich.Umgang mit der Abfolge von abhängigen Funktionen

Zum Beispiel:

bool remoteFunction(string resource, string parameter = "") 
{ 
// for example request 
//for simplicity this is considered a request, but each function has different logic 
return request.Url("example.com" + resource, parameter); 
} 

var firstResult = remoteFunction("a");     //1st step 
var secondResult = remoteFunction("b", firstResult); //2nd step 
var thirdResult = remoteFunction("c", secondResult); //3rd step 
var fourthResult = remoteFunction("d", thirdResult); //4rth steo 

Was möchte ich tun, ist:

  • Halten Sie erneut versuchen, die Funktion zu tun, bis sie das Ergebnis zurückgeben wir wollen. Dies kann innerhalb oder außerhalb der Funktion erfolgen.
  • Ich möchte in der Lage von einer Funktion auf eine vorherige zurückspringen und weiter durch den Fluss. h.: ​​Sprung vom 4. zum 2. Schritt und weiter von dort.

Was ist der beste Entwurf, um dies zu tun?

Danke für die Hilfe


Klarstellung: mehr klar sein, ich will nur in der Sequenz zurück gehen nur, wenn eine Funktion eine Ausnahme auslöst. d. h.: Wenn die vierte Funktion eine Ausnahme auslöst, muss ich zurück zur 1 gehen und von dort weitermachen.

+1

Es gibt nie ein bestes Design. Zu welchen Ideen bist du bisher gekommen? –

+0

Um zu tun, was Sie wollen, müssen Sie jede Funktion asynchron ausführen. Dann müssen Sie in der Lage sein, eine Funktion zum Ausführen auszuwählen. Die Auswahl könnte erfolgen, indem der Code in einen Schaltblock gesetzt wird, wobei jede Funktion einen anderen Fall hat. – jdweng

+0

@jdweng diese Funktionen müssen nacheinander ausgeführt werden. – circler

Antwort

0

Es war nicht klar, dass sie nacheinander ausgeführt werden müssen. Hier ist der Code

  var firstResult; 
      var secondResult; 
      var thirdResult; 
      var fourthResult; 
      int start = 3; 
      for (int i = start; i < 4; i++) 
      { 
       switch (i) 
       { 
        case 0 : 
         firstResult = remoteFunction("a"); 
         break; 
        case 1: 
         secondResult = remoteFunction("b", firstResult); 
         break; 
        case 2: 
         thirdResult = remoteFunction("c", secondResult); 
         break; 
        case 3: 
         fourthResult = remoteFunction("d", thirdResult); 
         break; 
       } 
      } 
+0

Ich denke, das ist unvollständig; Das OP erwähnte, dass jede Funktion vom Ergebnis der vorherigen Funktion in der Sequenz abhängt, aber diese Antwort scheint diesen Teil der Frage nicht zu behandeln. –

+0

Von der Beschreibung ist klingt wie die OP muss Methoden nicht wiederholen, die bestanden haben. Er möchte also von der Funktion fortfahren, die fehlgeschlagen ist. – jdweng

+0

Lesen Sie meinen Kommentar noch einmal; Die Frage besteht darin, Funktionen nacheinander aufzurufen, indem das ** Ergebnis ** der vorherigen Funktion als Argument an die nächste Funktion übergeben wird. –