2017-02-02 50 views
-1

我有一個web api方法,需要從另一方調用2個異步方法,並且需要第一個async方法的結果才能調用第二個async方法。我有類似下面的代碼,這顯然不像await關鍵字那樣工作,我的理解是它會進入下一行並繼續,同時向調用者返回一個Task對象。如何在web api方法中調用inter相關的異步方法

我需要從這個方法得到一個簡單的解釋,我需要從第三方的異步方法獲得一個令牌,之後,基於令牌,我需要做一些東西,然後使用令牌再次調用另一個來自第三方的aysnc方法。

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

       DoStuff1(); 

       var stuff = await CreateStuff(token); 

       SaveStuff(stuff); 

       ResponseObj response = new ResponseObj(stuff); 

       return response; 

      } 

我讀過一些文章,比如網上有的人說不是的await,我可以使用Task.Result使下根據調用不會直到任務運行的返回結果,有些人使用Task.Wait,似乎它會等到任務結束。我已經試過並且未能實現我的預期結果,在GetTokenAsync得到結果之前,CreateStuffAsync無法啓動。

有人能指出我做錯了什麼嗎?假設第一個等待已經將任務返回給調用者,那麼當第二個等待達到時會發生什麼?在這種方法中,我應該沒有超過1次的等待時間,特別是當依靠另一個時?

+0

請添加「以下代碼」。 – JohanP

+0

完成,對不起,我正在格式化代碼,以便它可以正確顯示。 – qualizon

+0

您是否真的測試過這些代碼以發現這實際上會做你想做的事情? – Servy

回答

0

該代碼正確的意義在於它正在等待第一個async呼叫,得到結果,然後繼續第二個async呼叫。