Todos os produtos
Search
Central de documentação

Alibaba Cloud SDK:Usar o recurso de chamadas assíncronas

Última atualização: Jun 28, 2026

O Classic SDK for Go oferece suporte a chamadas assíncronas, permitindo enviar requisições de API sem bloquear a thread atual.

Ative o recurso de chamadas assíncronas

O Classic SDK for Go disponibiliza dois métodos para ativar chamadas assíncronas. Após a ativação, chame Shutdown() antes de reativá-las.

  1. Ative o recurso de chamadas assíncronas ao inicializar um 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. Ative o recurso de chamadas assíncronas ao chamar 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)

Iniciar uma chamada assíncrona

O Classic SDK for Go oferece dois métodos para iniciar uma chamada assíncrona.

  1. Use um channel para retornar a resposta.

    responseChannel, errChannel := client.FooWithChan(request)
    
    // this will block
    response := <-responseChannel
    err = <-errChannel
  2. Use uma função de callback para retornar a resposta.

    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

Desativar o recurso de chamadas assíncronas

Chame Shutdown() para desativar as chamadas assíncronas e encerrar as goroutines.

client.Shutdown()