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

开启SDK Client的并发功能

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

阿里云2000元代金券免费领,最新优惠1折抢购,2核4G云服务器仅799元/3年,新老用户同享,立即抢购>>>

// 最大并发数 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