2014-12-19 46 views
0

我試圖在一個任務中包裝我的「GetNonEmptyString」函數,所以我可以在異步方法中等待它。以下代碼返回正確的字符串,但爲什麼沒有執行任何Task.Delay語句?異步函數 - 任務工廠

Public Async Function GetDataAsync() As Task(Of String) 
    Dim result = Await GetStringAsync() 
    Return result 
End Function 

Public Function GetStringAsync() As Task(Of String) 
    Return Task(Of String).Factory.StartNew(Function() 
                 Task.Delay(100000) 
                 Return GetNonEmptyString() 
                End Function) 
End Function 

Private Function GetNonEmptyString() As String 
    Task.Delay(100000) 
    Return "notEmpty" 
End Function 

回答

4

Task.Delay不是Thread.Sleep等同。

Task.Delay返回一個Task,這將延遲後完成。爲了實際等待任務完成,您必須Await返回的任務,請調用其.Result屬性或.Wait()方法或使用.ContinueWith繼續。