開啟非同步呼叫
Alibaba Cloud SDK for Go 支援兩種方式開啟非同步呼叫: 註:開啟非同步呼叫之後需要先調用 Shutdown() 才能再次開啟非同步呼叫。
初始化
client的時候開啟非同步呼叫import ( "github.com/aliyun/alibaba-cloud-sdk-go/sdk" "github.com/aliyun/alibaba-cloud-sdk-go/sdk/auth/credentials" "github.com/aliyun/alibaba-cloud-sdk-go/services/ecs" ) c := sdk.NewConfig() c.EnableAsync = true // 非同步任務開關 c.GoRoutinePoolSize = 10 // 開啟的協程數 c.MaxTaskQueueSize = 20 // 單個協程的最大任務數 c.Timeout = 10 * time.Second credential := credentials.NewAccessKeyCredential("acesskeyid", "accesskeysecret") client, err := ecs.NewClientWithOptions("regionid", c, credential)調用
EnableAsync的時候開啟非同步呼叫// 第一個入參為開啟的協程數 // 第二個入參為單個協程的最大任務數 // EnableAsync 只允許調用一次, 除非使用 Shutdown() 方法先關閉非同步呼叫,再調用 EnableAsync client.EnableAsync(10, 20)
發起非同步呼叫
Alibaba Cloud SDK for Go 支援兩種方式的非同步呼叫:
使用channel作為傳回值
responseChannel, errChannel := client.FooWithChan(request) // this will block response := <-responseChannel err = <-errChannel使用 callback 控制回調
blocker := client.FooWithCallback(request, func(response *FooResponse, err error) { // handle the response and err }) // blocker 為(chan int),用於控制同步,返回1為成功,0為失敗 // 在<-blocker返回失敗時,err依然會被傳入的callback處理 result := <-blocker
關閉非同步呼叫
通過調用 client 的執行個體方法關閉非同步呼叫並且關閉對應的協程
client.Shutdown()