类型的值' System.Threading.Tasks.Task(Of String)'无法转换为' String'

时间:2014-04-16 18:13:45

标签: vb.net multithreading

我想我在做一些可怕的错误......

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

请问任何想法?

2 个答案:

答案 0 :(得分:4)

你的函数不是字符串。它返回一个Task(Of String),就像它在错误消息中所说的那样,你可以在函数声明中看到它。你看,它没有像你想的那样工作。

解决方案应该是:尝试拨打GetResponse("", New KeyValuePair(Of String, String)).Result,这样就可以做到你想要的。结果类似于任务的类型参数。

答案 1 :(得分:2)

你应该Await任务去打开"他们的结果如下:

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

是的,这确实意味着调用方法确实需要Async,因此它的来电者必须使用Await等。这非常自然; Async确实"感染"像这样的代码库。