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