You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用HttpClient.ReadAsStringAsync()返回字符串遇编译错误求助

问题分析与解决方法

1. 编译错误的直接原因

你的CallWebAPI是异步函数,返回的是Task(Of String)类型,而非直接的String。调用异步函数必须使用Await关键字获取实际返回的字符串值,同时调用该函数的方法也需要标记为Async。

修改后的调用代码:

Dim sConfig As String = Await CallWebAPI("192.168.0.100", "getLevel")

注意:如果这段调用代码写在Sub中,需要将Sub改为Async Function,遵循异步代码的编写规范。

2. 函数内部的问题修正

你的函数本身存在两处错误,需要一并调整:

  • 避免同步阻塞异步方法:content.ReadAsStringAsync().Result会强制同步等待异步操作完成,极易引发死锁,应替换为Await content.ReadAsStringAsync()
  • 返回类型不匹配:Return True中True是布尔类型,与函数返回的Task(Of String)类型冲突,需改为返回字符串类型的默认值,比如String.Empty

修正后的完整函数代码:

Public Async Function CallWebAPI(sIPAddress As String, sCommand As String) As Task(Of String)
    Try
        Using client As HttpClient = New HttpClient()
            Using response As HttpResponseMessage = Await client.GetAsync($"http://{sIPAddress}/{sCommand}")
                ' 检查HTTP响应是否成功,失败则抛出异常
                response.EnsureSuccessStatusCode()
                Using content As HttpContent = response.Content
                    Dim result As String = Await content.ReadAsStringAsync()
                    ' 处理结果为空的情况,返回空字符串
                    Return result ?? String.Empty
                End Using
            End Using
        End Using
    Catch ex As Exception
        Debug.WriteLine($"ERROR: {ex.Message}")
        Return "ERROR"
    End Try
End Function

补充说明:

  • 使用字符串插值$"http://{sIPAddress}/{sCommand}"替代字符串拼接,代码更简洁易读
  • 添加response.EnsureSuccessStatusCode(),当HTTP响应状态码为非成功值(如404、500)时自动抛出异常,便于异常捕获和排查

内容的提问来源于stack exchange,提问作者user412421

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 00:07:30