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

开启SDK Client的并发功能

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

// 最大并发数
poolSize := 10

// 可缓存的最大请求数
maxTaskQueueSize := 10000

// 在创建时开启异步功能
config := sdk.NewConfig().
    WithEnableAsync(true).
    WithGoRoutinePoolSize(poolSize).            // 可选,默认5
    WithMaxTaskQueueSize(maxTaskQueueSize)      // 可选,默认1000
	
// 使用自定义的配置初始化client
ecsClient, err := ecs.NewClientWithOptions("<your-region-id>", config, credential)

// 也可以在client初始化后再开启
client.EnableAsync(poolSize, maxTaskQueueSize)

发起异步调用

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

  • 使用channel作为返回值
    // this will not block
    responseChannel, errChannel := client.FooWithChan(request)
    // this will block
    response := <-responseChannel
    err = <-errChanne
  • 使用callback控制回调
    // this will not block
    blocker := client.FooWithCallback(request, func(response *FooResponse, err error) {
            // handle the response and err
          }
        )
    // blocker 为(chan int),用于控制同步,返回1为成功,0为失败
    // 在<-blocker返回失败(0)时,错误信息会通过err传递给callback
    // this will block
    result := <-blocker