2014-04-16 5 views
1

내가 여기서 뭔가 끔찍한 잘못을하고있는 중이 야 생각에값 '(문자열) System.Threading.Tasks.Task'유형은 ... '문자열'

Dim s As String = GetResponse("", New KeyValuePair(Of String, String)) 

    Public Async Function GetResponse(ByVal url As String, ByVal params As KeyValuePair(Of String, String)) As System.Threading.Tasks.Task(Of String) 
     Dim values = New List(Of KeyValuePair(Of String, String)) 
     Dim httpClient = New HttpClient(New HttpClientHandler()) 
     Dim response As HttpResponseMessage = Await httpClient.PostAsync(url, New FormUrlEncodedContent(values)) 
     response.EnsureSuccessStatusCode() 
     Return Await response.Content.ReadAsStringAsync() 
    End Function 

어떤 아이디어를주십시오 변환 할 수 없습니다?

답변

4

함수는 문자열을 반환하지 않습니다. 그것은 당신이 함수 선언에서 볼 수있는 것처럼 에러 메시지에서 말한 것처럼 Task (Of String)를 반환합니다. 보시다시피, 생각대로 작동하지 않습니다.

해결책은 다음과 같아야합니다. GetResponse("", New KeyValuePair(Of String, String)).Result으로 전화하여 원하는대로 수행하십시오. Result는 Task의 type 매개 변수와 같은 유형입니다.

2

당신이해야 같은 자신의 결과를 "풀다"할 Await 작업 :

Dim s As String = Await GetResponse("", New KeyValuePair(Of String, String)) 

네, 그렇게 발신자가 Await을 사용해야합니다입니다, 호출 방법은 Async 할 필요가 않음을 의미 하는가, 등 이것은 완벽하게 자연 스럽습니다. Async 이렇게 코드베이스를 "감염"시킵니다.