异步功能 - 任务工厂

时间:2014-12-19 09:43:20

标签: .net vb.net asynchronous async-await

我试图包装我的" 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

1 个答案:

答案 0 :(得分:4)

Task.Delay不等同于Thread.Sleep

Task.Delay会返回Task,这会在延迟后完成。为了实际等待任务完成,您必须Await返回的任务,调用其.Result属性或.Wait()方法或使用.ContinueWith延续。