All Products
Search
Document Center

Alibaba Cloud SDK:Use the asynchronous calls feature

Last Updated:Feb 24, 2022

Enable the asynchronous calls feature

In Classic SDK for Go, you can use two methods to enable the asynchronous calls feature. After you enable the asynchronous calls feature, you must call Shutdown() before you can enable the asynchronous calls feature again.

  1. Enable the asynchronous calls feature when you initialize a 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 // Enable the asynchronous calls feature.
    c.GoRoutinePoolSize = 10 // Configure the number of goroutines.
    c.MaxTaskQueueSize = 20 // Configure the maximum number of tasks for a single goroutine.
    c.Timeout = 10 * time.Second
    credential := credentials.NewAccessKeyCredential("acesskeyid", "accesskeysecret")
    client, err := ecs.NewClientWithOptions("regionid", c, credential)
  2. Enable the asynchronous calls feature when you call EnableAsync.

    // Configure the number of goroutines.
    // Configure the maximum number of tasks for a single goroutine.
    // You can call EnableAsync only once. If you want to call EnableAsync again, you must call Shutdown() to disable the asynchronous calls feature.
    client.EnableAsync(10, 20)

Initiate an asynchronous call

In Classic SDK for Go, you can use two methods to initiate an asynchronous call.

  1. Use a channel to return a response.

    responseChannel, errChannel := client.FooWithChan(request)
    
    // this will block
    response := <-responseChannel
    err = <-errChannel
  2. Use the callback function to return a response.

    blocker := client.FooWithCallback(request, func(response *FooResponse, err error) {
        // handle the response and err
    })
    
    // The blocker is of the (chan int) type and is used to control synchronization. If the response is 1, the operation is successful. If the response is 0, the operation failed.
    // If <-blocker returns 0, the operation failed and the error message is passed to the callback function by using err.
    result := <-blocker

Disable the asynchronous calls feature

Disable the asynchronous calls feature and close the goroutines by calling Shutdown().

client.Shutdown()