すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud SDK:非同期呼び出し機能の使い方

最終更新日:Jan 15, 2025

非同期呼び出し機能を有効にする

Classic SDK for Go では、2 つの方法で非同期呼び出し機能を有効にできます。非同期呼び出し機能を有効にした後、再度有効にするには、Shutdown() を呼び出す必要があります。

  1. 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)
  2. EnableAsync を呼び出すときに非同期呼び出し機能を有効にします。

    // ゴルーチンの数を設定します。
    // 単一のゴルーチンの最大タスク数を設定します。
    // EnableAsync は 1 回だけ呼び出すことができます。もう一度 EnableAsync を呼び出す場合は、Shutdown() を呼び出して非同期呼び出し機能を無効にする必要があります。
    client.EnableAsync(10, 20)

非同期呼び出しを開始する

Classic SDK for Go では、2 つの方法で非同期呼び出しを開始できます。

  1. チャネルを使用してレスポンスを返します。

    responseChannel, errChannel := client.FooWithChan(request)
    
    // これはブロックします
    response := <-responseChannel
    err = <-errChannel
  2. コールバック関数を使用してレスポンスを返します。

    blocker := client.FooWithCallback(request, func(response *FooResponse, err error) {
        // レスポンスとエラーを処理します
    })
    
    // ブロッカーは (chan int) 型で、同期を制御するために使用されます。レスポンスが 1 の場合は操作が成功しています。レスポンスが 0 の場合は操作が失敗しています。
    // <-blocker が 0 を返した場合、操作は失敗し、エラーメッセージは err を使用してコールバック関数に渡されます。
    result := <-blocker

非同期呼び出し機能を無効にする

Shutdown() を呼び出すことで、非同期呼び出し機能を無効にし、ゴルーチンを閉じます。

client.Shutdown()