首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >vb.net任务(Of HttpResponseMessage)到HttpResponseMessage

vb.net任务(Of HttpResponseMessage)到HttpResponseMessage
EN

Stack Overflow用户
提问于 2016-06-23 14:55:17
回答 1查看 4.1K关注 0票数 1

我有一个vb.net异步httpResponse函数,如下所示:

代码语言:javascript
复制
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).

我怎么能拿到这个?提前感谢您的帮助!

向马丁问好

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-23 14:59:21

respHttpResponseMessage。然而,该方法是Async。注意方法签名:

代码语言:javascript
复制
Public Async Function getWebserviceResponse(...) As Task(Of HttpResponseMessage)

因此,当代码在逻辑上返回一个HttpResponseMessage时,该方法在技术上返回一个Task(Of HttpResponseMessage)。这与其中调用的方法完全相同。注:

代码语言:javascript
复制
resp = Await client.PostAsync(baseUri, content, cancellationToken)

PostAsync方法返回一个Task(Of HttpResponseMessage),但是这一行代码将一个HttpResponseMessage放入resp变量中。这是因为使用了Await关键字。

要实现相同的行为,任何调用getWebserviceResponse()方法的方法都应该执行相同的操作:

代码语言:javascript
复制
someVariable = Await getWebServiceResponse(...)

编辑:基于下面的评论,您有以下代码行:

代码语言:javascript
复制
Dim myStreamReader As New StreamReader(webserviceResponse.getWebserviceResponse(....).Content.ReadAsStream‌​Async().Result) 

我怀疑应该将其改为使用Await关键字:

代码语言:javascript
复制
Dim myStreamReader As New StreamReader(Await (Await webserviceResponse.getWebserviceResponse(....)).Content.ReadAsStream‌​Async())

或者,把它分解成一些不那么令人困惑的东西:

代码语言:javascript
复制
Dim responseMessage As HttpResponseMessage = Await webserviceResponse.getWebserviceResponse(....)
Dim responseStream As Stream = Await responseMessage.Content.ReadAsStreamAsync()
Dim myStreamReader As New StreamReader(responseStream)

每个单独的异步操作都需要等待。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37995179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档