2016-12-30 73 views
0

在DLL中使用HttpClient sub。但是調用應用程序想要得到一個True或False作爲HttpClient工作的回報。函數調用Async Sub精修函數在Async之前

於是,我就寫像這樣

Public Function SendBasket() As Integer 
    Try 
     SendMarketBasket() 

     If MktResp = "Loaded" Then 
      Return 0 
     ElseIf MktResp = "Nothing to Load" Then 
      Return -1 
     End If 
    Catch ex As Exception 
     Return -1 
    End Try 
End Function 

Private Async Sub SendMarketBasket()........ 

一個簡單的調用應用程序顯然MktResp設置之前調用異步調用後,如果語句運行。如何才能在Async調用完成後返回函數結果?

TIA 哈利

+0

我不認爲有任何方式告訴了'異步Sub當'完成 - 他們是忘卻火。您可以將其更改爲'Private Async Function SendMarketBasket()As Task'並使用'SendMarketBasket()。Wait()',但這可能會導致死鎖。 [這](http://stackoverflow.com/questions/9343594/how-to-call-asynchronous-method-from-synchronous-method-in-c)有一些很好的信息,並可能有其他人。 – Mark

回答

2

更改SendMarketBasket方法返回Task
然後你就可以「等待」的任務完成獲得並繼續執行基於返回的結果

Private Async Function SendMarketBasketAsync() As Task 
    ' your code 
End Function 

然後,你需要改變SendBasket方法的簽名,以異步過你的代碼。

Public Async Function SendBasketAsync() As Task(Of Integer) 
    Await SendMarketBasketAsync() 

    If MktResp = "Loaded" Then 
     Return 0 
    ElseIf MktResp = "Nothing to Load" Then 
     Return -1 
    End If 
End Function 

如果添加Async後綴的異步方法可以節省你和你的同事的時間。

Async像殭屍,如果你開始使用它的地方,將遍佈所有應用程序 - 這是不是一件壞事:)

相關問題