vb.net - 为什么异步函数返回 System.Threading.Tasks.Task`1[S

我有一个 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

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

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

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

更新

这里是调用的函数:

 txtIDDoc_Detail.Text = ApiData.GetIdDoc().ToString()

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

最佳答案

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

txtIDDoc_Detail.Text = await ApiData.GetIdDoc();

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

关于vb.net - 为什么异步函数返回 System.Threading.Tasks.Task`1[System.String]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40291526/

相关文章:

user-interface - 如何更改 NativeScript 标签的文本

haskell - Haskell 中的 'let' 和变量

php - OMDb API 多个结果

angular - 循环调用 Angular2 服务

spring - 基于模型变量+Spring表单+JSP的选中单选按钮

macos - 从 Mac OSX 移除 Saltstack

winapi - Windows 函数调用中的堆栈是如何设置的?

r - 删除取值小于 n 的列?

python - 在 python 中的 .ttf 字体文件中检索所有字形的边界框和贝塞尔曲线数据

r - 在 r 中为多个箱形图创建循环