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

.NET6使用GoogleGeocoder反向地理编码遇WaitingForActivation问题

问题场景
  • 运行环境:.NET 6
  • 实现目标:对指定坐标执行反向地理编码操作,采用接入Google API的GoogleGeocoder组件实现功能,API密钥出于安全考虑已隐藏
  • 核心实现代码:
IGeocoder geocoder = new GoogleGeocoder() { ApiKey = "" };

static async Task<IEnumerable<Address>> getPlaceAsync(IGeocoder geocoder)
{
    IEnumerable<Address> addresses = await geocoder.ReverseGeocodeAsync(51.683, -1.68847);
    return addresses;
}

var ff = getPlaceAsync(geocoder);
  • 异常现象:在函数调用语句之后设置断点查看返回结果,得到的响应状态为WaitingForActivation,结果截图如下:
    断点查看返回结果状态截图
问题原因

该问题由异步方法的错误调用方式导致:
getPlaceAsync是返回Task<IEnumerable<Address>>的异步方法,直接调用方法但未使用await关键字时,变量存储的是代表异步操作的Task对象本身,而非方法最终返回的地址集合结果。WaitingForActivation是异步任务未完成时的标准状态,代表后台地理编码请求还在执行过程中,尚未产出最终结果。

解决方案

根据代码所在上下文选择对应修正方式即可:

  • 若调用代码处于异步方法上下文中,直接对方法调用添加await关键字,即可拿到实际返回的地址集合结果,这是异步编程的标准写法:
var ff = await getPlaceAsync(geocoder);
  • 若调用代码处于同步上下文(例如非异步的控制台Main方法)中,可通过.GetAwaiter().GetResult()等待任务完成后获取结果。注意该写法不推荐作为常规实现,同步上下文嵌套等待异步任务存在死锁风险,优先将调用方改造为异步方法:
var ff = getPlaceAsync(geocoder).GetAwaiter().GetResult();

额外提示:正式运行代码前需要为ApiKey字段填入你申请的有效Google Geocoding API密钥,否则即使异步调用逻辑正确,也会因为鉴权失败抛出请求异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:00:11