2017-02-02 6 views
-1

Ich habe eine Web-API-Methode, die 2 asynchrone Methode von einer anderen Partei aufrufen müssen, und das Ergebnis der ersten asynchronen Methode erforderlich ist, um die zweite asynchrone Methode aufzurufen . Ich habe etwas wie den folgenden Code, der offensichtlich nicht funktioniert wie mit dem await-Schlüsselwort, ich verstehe, dass es in die nächste Zeile geht und fortfährt und gleichzeitig ein Task-Objekt an den Aufrufer zurücksendet.So rufen Sie verwandte asynchrone Methode innerhalb einer Web-API-Methode

Eine kurze Erklärung, was ich von dieser Methode brauche, ist, dass ich ein Token von einer Async-Methode eines Drittanbieters erhalten muss, danach auf dem Token basiere, muss ich ein paar Sachen machen, dann benutze das Token Rufen Sie erneut eine aysnc-Methode von der dritten Partei an.

  public async Task<ResponseObj> DoSomething() 
      { 
       var token = await GetTokenAsync(); 

       DoStuff1(); 

       var stuff = await CreateStuff(token); 

       SaveStuff(stuff); 

       ResponseObj response = new ResponseObj(stuff); 

       return response; 

      } 

Ich habe gelesen, ein paar Artikel und Beispiel online und einige Leute sagen, statt await, kann ich Task.Result verwenden, so dass der nächste je Anruf wird nicht bis zur Aufgabe führen Sie das Ergebnis zurück, einige Leute Verwenden Sie Task.Wait, und es scheint, als würde es warten, bis die Aufgabe beendet ist. Ich habe beide versucht und konnte mein erwartetes Ergebnis nicht erreichen. CreateStuffAsync kann erst starten, wenn ich das Ergebnis von GetTokenAsync habe.

Kann jemand darauf hinweisen, was ich falsch gemacht habe? Nehmen wir an, wenn die erste wartet schon eine Aufgabe an den Anrufer zurück, was passiert dann, wenn die zweite erwartet wird? Soll ich in der Methode nicht mehr als 1 erwarten, besonders wenn man sich auf die andere verlässt?

+0

Bitte fügen Sie den "untenstehenden Code" hinzu. – JohanP

+0

fertig, sorry Ich habe den Code so formatiert, dass er richtig angezeigt werden kann. – qualizon

+0

Haben Sie tatsächlich den Code getestet, um herauszufinden, dass dies tatsächlich das macht, was Sie wollen? – Servy

Antwort

0

Diesen Code direkt in dem Sinne ist es zum ersten async Anruf wartet, das Ergebnis bekommen und dann mit dem zweiten async Anruf fortzusetzen.

Verwandte Themen