barsan barsan - 1 month ago 13
Vb.net Question

Why Async function returning System.Threading.Tasks.Task`1[System.String]?

I have a VB.NET function as below:

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


I'm trying to return the Document ID from the DB but I'm getting


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


Where actually it should return "2". Please help me on this: what am I doing wrong with this function?

Update

here is the function called:

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


But inside the textbox I'm getting the above text. thanks.

Answer

I'm from C# but should work the same. In newer .Net Versions (>= 4.5) async/await is implemented. So if a method is marked as async and returns a Task (which should always be the case), you need to await it. This implicate that you have to mark your Method as async too. So your call should look like this:

txtIDDoc_Detail.Text = await ApiData.GetIdDoc();

The await waits till the long running Task is ready and returns it's inner value. All async Methods should return Task. If the Method is void it would be Task. Else it could be Task<int> or any other type. So await it and you can keep running ;)

Comments