非同期呼び出し機能を有効にする
Classic SDK for Go では、2 つの方法で非同期呼び出し機能を有効にできます。非同期呼び出し機能を有効にした後、再度有効にするには、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 は 1 回だけ呼び出すことができます。もう一度 EnableAsync を呼び出す場合は、Shutdown() を呼び出して非同期呼び出し機能を無効にする必要があります。 client.EnableAsync(10, 20)
非同期呼び出しを開始する
Classic SDK for Go では、2 つの方法で非同期呼び出しを開始できます。
チャネルを使用してレスポンスを返します。
responseChannel, errChannel := client.FooWithChan(request) // これはブロックします response := <-responseChannel err = <-errChannelコールバック関数を使用してレスポンスを返します。
blocker := client.FooWithCallback(request, func(response *FooResponse, err error) { // レスポンスとエラーを処理します }) // ブロッカーは (chan int) 型で、同期を制御するために使用されます。レスポンスが 1 の場合は操作が成功しています。レスポンスが 0 の場合は操作が失敗しています。 // <-blocker が 0 を返した場合、操作は失敗し、エラーメッセージは err を使用してコールバック関数に渡されます。 result := <-blocker
非同期呼び出し機能を無効にする
Shutdown() を呼び出すことで、非同期呼び出し機能を無効にし、ゴルーチンを閉じます。
client.Shutdown()