全部产品
弹性计算 会员服务 网络 安全 移动云 数加·大数据分析及展现 数加·大数据应用 管理与监控 云通信 阿里云办公 培训与认证 更多
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 智能硬件
阿里云SDK开发指南

异步调用

更新时间:2018-02-05 23:19:05

异步调用说明

  • 因Go语言的并发特性,建议您在应用层面控制SDK的并发请求。
  • 为了方便您的使用,阿里云Go SDK也提供了可直接使用的并发调用方式,相关的并发控制由SDK内部实现。

开启SDK Client的并发功能

示例代码中的Credential对象为用户凭据。

  1. // 最大并发数
  2. poolSize := 10
  3. // 可缓存的最大请求数
  4. maxTaskQueueSize := 10000
  5. // 在创建时开启异步功能
  6. config := sdk.NewConfig().
  7. WithEnableAsync(true).
  8. WithGoRoutinePoolSize(poolSize). // 可选,默认5
  9. WithMaxTaskQueueSize(maxTaskQueueSize) // 可选,默认1000
  10. // 使用自定义的配置初始化client
  11. ecsClient, err := ecs.NewClientWithOptions("<your-region-id>", config, credential)
  12. // 也可以在client初始化后再开启
  13. client.EnableAsync(poolSize, maxTaskQueueSize)

发起异步调用

阿里云Go SDK支持两种方式的异步调用:

  • 使用channel作为返回值

    1. // this will not block
    2. responseChannel, errChannel := client.FooWithChan(request)
    3. // this will block
    4. response := <-responseChannel
    5. err = <-errChannel
  • 使用callback控制回调

    1. // this will not block
    2. blocker := client.FooWithCallback(request, func(response *FooResponse, err error) {
    3. // handle the response and err
    4. })
    5. // blocker 为(chan int),用于控制同步,返回1为成功,0为失败
    6. // 在<-blocker返回失败(0)时,错误信息会通过err传递给callback
    7. // this will block
    8. result := <-blocker
本文导读目录