All Products
Search
Document Center

Alibaba Cloud SDK:Gunakan fitur panggilan asinkron

Last Updated:Jun 28, 2025

Aktifkan fitur panggilan asinkron

Di Classic SDK for Go, Anda dapat menggunakan dua metode untuk mengaktifkan fitur panggilan asinkron. Setelah mengaktifkan fitur ini, Anda harus memanggil Shutdown() sebelum dapat mengaktifkannya kembali.

  1. Aktifkan fitur panggilan asinkron saat menginisialisasi 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 // Aktifkan fitur panggilan asinkron.
    c.GoRoutinePoolSize = 10 // Konfigurasikan jumlah goroutine.
    c.MaxTaskQueueSize = 20 // Konfigurasikan jumlah maksimum tugas untuk satu goroutine.
    c.Timeout = 10 * time.Second
    credential := credentials.NewAccessKeyCredential("acesskeyid", "accesskeysecret")
    client, err := ecs.NewClientWithOptions("regionid", c, credential)
  2. Aktifkan fitur panggilan asinkron saat memanggil EnableAsync.

    // Konfigurasikan jumlah goroutine.
    // Konfigurasikan jumlah maksimum tugas untuk satu goroutine.
    // Anda hanya dapat memanggil EnableAsync sekali. Jika Anda ingin memanggil EnableAsync lagi, Anda harus memanggil Shutdown() untuk menonaktifkan fitur panggilan asinkron.
    client.EnableAsync(10, 20)

Mulai panggilan asinkron

Di Classic SDK for Go, Anda dapat menggunakan dua metode untuk memulai panggilan asinkron.

  1. Gunakan saluran untuk mengembalikan respons.

    responseChannel, errChannel := client.FooWithChan(request)
    
    // ini akan memblokir
    response := <-responseChannel
    err = <-errChannel
  2. Gunakan fungsi callback untuk mengembalikan respons.

    blocker := client.FooWithCallback(request, func(response *FooResponse, err error) {
        // tangani respons dan err
    })
    
    // Blocker bertipe (chan int) dan digunakan untuk mengontrol sinkronisasi. Jika responsnya adalah 1, operasi berhasil. Jika responsnya adalah 0, operasi gagal.
    // Jika <-blocker mengembalikan 0, operasi gagal dan pesan kesalahan diteruskan ke fungsi callback melalui err.
    result := <-blocker

Nonaktifkan fitur panggilan asinkron

Nonaktifkan fitur panggilan asinkron dan tutup goroutine dengan memanggil Shutdown().

client.Shutdown()