2017-11-18 1 views
2

Ich habe einen Anwendungsfall, der gut mit dem Beispiel für dauerhafte Funktionen zusammenpasst: eine Json-Nutzlast durch drei Funktionen schieben, von denen jede den JSON-Graphen ändert und an die nächste Funktion weiterleitet.Durable Functions: Rückgabeergebnis vom Koordinationsrechner

Im Sequenzbeispiel wird das Ergebnis der Sequenz abgerufen, indem eine Abfrage an den Orchestrator gesendet wird.

In meinem Anwendungsfall möchte ich direkt das Ergebnis der drei Funktionen im Wesentlichen als Antwort der dritten Funktion zurückgeben.

Gibt es eine Möglichkeit, dies zu tun? Ist es sogar weise?

Antwort

0

Dies ist sicherlich machbar. Sie können mit einem HTTP-Trigger beginnen, um die Orchestrierung zu starten, und die API GetStatusAsync in Ihrer Funktion verwenden, um abzufragen und darauf zu warten, dass sie abgeschlossen wird. Nach Abschluss können Sie das Ergebnis von Ihrem HTTP-Trigger zurückgeben. vielleicht

Etwas Ähnliches,:

public static async Task<JObject> Run(JObject input, DurableOrchestrationClient client) 
{ 
    string instanceId = await client.StartAsync("MyOrchestration", input); 
    for (int i = 0; i < 60; i++) 
    { 
     var status = await client.GetStatusAsync(instanceId); 
     if (status?.RuntimeStatus == "Completed") 
     { 
      return (JObject)status.Output; 
     } 

     // handle other status conditions, like failure 

     await Task.Delay(TimeSpan.FromSeconds(1)); 
    } 

    // handle timeouts 
} 

Wie Sie aus dem Code sehen können, das Problem, das Sie haben müssen, ist mit Fehlerbedingungen zu tun. Zum Beispiel, was macht Ihre Funktion, wenn die Orchestrierung fehlschlägt? Und was, wenn es lange dauert, bis man fertig ist? Das sind Dinge, die Sie sicherlich herausfinden können, aber Sie werden defensiv codieren wollen, um diese Fälle zu behandeln.

+0

Explizite Verzögerungen sehen fischig aus. Irgendeine Möglichkeit, dies ohne Polling zu erreichen (d. H. Blockieren bis getan)? – Mikhail

+0

Wir könnten eine API erstellen, die die Abfrage für Sie durchführt? Die Herausforderung besteht darin, dass Azure Storage über keine integrierten Pub/Sub-Mechanismen verfügt, die wir nutzen könnten. –

Verwandte Themen