我有一个vb.net异步httpResponse函数,如下所示:
Public Async Function getWebserviceResponse(ByVal sb As StringBuilder, ByVal baseUri As Uri, ByVal Method As String, ByVal User As String, ByVal Password As String) As Task(Of HttpResponseMessage)
Dim client As HttpClient = New HttpClient()
client.BaseAddress = baseUri
Dim authHeader As AuthenticationHeaderValue = New AuthenticationHeaderValue(
"Basic",
Convert.ToBase64String(
System.Text.ASCIIEncoding.ASCII.GetBytes(
String.Format("{0}:{1}", User, Password))))
client.DefaultRequestHeaders.Authorization = authHeader
Dim content As New StringContent(sb.ToString, System.Text.Encoding.UTF8, "application/json")
Dim resp As HttpResponseMessage
Dim cancellationToken As CancellationToken
If Method = "Post" Then
resp = Await client.PostAsync(baseUri, content, cancellationToken)
ElseIf Method = "Put" Then
resp = Await client.PutAsync(baseUri, content, cancellationToken)
End If
Return resp
End Function问题是,"resp“应该返回”正常“的HttpResponseMessage,而不是任务(Of HttpResponseMessage).
我怎么能拿到这个?提前感谢您的帮助!
向马丁问好
发布于 2016-06-23 14:59:21
resp是HttpResponseMessage。然而,该方法是Async。注意方法签名:
Public Async Function getWebserviceResponse(...) As Task(Of HttpResponseMessage)因此,当代码在逻辑上返回一个HttpResponseMessage时,该方法在技术上返回一个Task(Of HttpResponseMessage)。这与其中调用的方法完全相同。注:
resp = Await client.PostAsync(baseUri, content, cancellationToken)PostAsync方法返回一个Task(Of HttpResponseMessage),但是这一行代码将一个HttpResponseMessage放入resp变量中。这是因为使用了Await关键字。
要实现相同的行为,任何调用getWebserviceResponse()方法的方法都应该执行相同的操作:
someVariable = Await getWebServiceResponse(...)编辑:基于下面的评论,您有以下代码行:
Dim myStreamReader As New StreamReader(webserviceResponse.getWebserviceResponse(....).Content.ReadAsStreamAsync().Result) 我怀疑应该将其改为使用Await关键字:
Dim myStreamReader As New StreamReader(Await (Await webserviceResponse.getWebserviceResponse(....)).Content.ReadAsStreamAsync())或者,把它分解成一些不那么令人困惑的东西:
Dim responseMessage As HttpResponseMessage = Await webserviceResponse.getWebserviceResponse(....)
Dim responseStream As Stream = Await responseMessage.Content.ReadAsStreamAsync()
Dim myStreamReader As New StreamReader(responseStream)每个单独的异步操作都需要等待。
https://stackoverflow.com/questions/37995179
复制相似问题