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

async-await, vb.net, winforms

Solution

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 ;)

Problem

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.

Original source