为什么异步函数返回 System.Threading.Tasks.Task`1[System.String]?

bar*_*san 2 vb.net winforms async-await

我有一个 VB.NET 函数,如下所示:

Public Shared Async Function GetIdDoc() As Task(Of String)
    Dim result As String = ""
    'Dim Uri As String = "http://localhost:53917/api/Documenti/GetNextIdDocumenti"
    Dim Uri As String = apiUri & ApiEndPoints.GetNextIdDocumenti

    Using client = New HttpClient()
        Using response = Await client.GetAsync(Uri)
            If response.IsSuccessStatusCode Then
                Dim DocumentiIDJsonString = Await response.Content.ReadAsStringAsync()
                result = DocumentiIDJsonString.ToString()

            End If
        End Using
    End Using
    Return result
End Function
Run Code Online (Sandbox Code Playgroud)

我正在尝试从数据库返回文档 ID,但我得到了

System.Threading.Tasks.Task`1[System.String]

实际上它应该返回“2”的地方。请帮我解决这个问题:这个功能我做错了什么?

更新

这是调用的函数:

 txtIDDoc_Detail.Text = ApiData.GetIdDoc().ToString()
Run Code Online (Sandbox Code Playgroud)

但是在文本框中我得到了上面的文本。谢谢。

Seb*_*ebi 7

我来自 C#,但应该工作相同。在较新的 .Net 版本 (>= 4.5) 中实现了 async/await。因此,如果一个方法被标记为异步并返回一个任务(应该总是如此),您需要等待它。这意味着您也必须将您的方法标记为异步。所以你的电话应该是这样的:

txtIDDoc_Detail.Text = await ApiData.GetIdDoc();
Run Code Online (Sandbox Code Playgroud)

等待等待长时间运行的任务准备好并返回它的内部值。所有异步方法都应该返回任务。如果 Method 为 void,它将是 Task。否则它可能是Task<int>或任何其他类型。所以等待它,你可以继续运行;)