使用AWS-cpp-sdk时,在退出程序之前等待异步调用返回

Wait for async calls to return before exiting program when using AWS-cpp-sdk

本文关键字:等待 异步 调用 返回 退出程序 AWS-cpp-sdk 使用      更新时间:2023-10-16

我正在做关于使用AWS-cpp-sdk的POC为此,我编写了一个简单的程序向SQS队列发送消息。

我正在使用SendMessageAsync方法发送如下消息。

sqsClient->SendMessageAsync(sendMessageRequest, &sendMessageCallBack);

我的程序崩溃,因为我的程序在async方法返回之前退出,并且Aws::ShutdownAPI(options);终止了由async方法调用创建的线程。

我发现针对JAVA的AWS-sdk针对这个场景给出了以下建议。'

/**
 * Shuts down the client, releasing all managed resources. This includes
 * forcibly terminating all pending asynchronous service calls. Clients who
 * wish to give pending asynchronous service calls time to complete should
 * call getExecutorService().shutdown() prior to calling this method.
 */
@Override
public void shutdown() {
    super.shutdown();
    executorService.shutdownNow();
}`

我无法在AWS cpp SDK中找到等效的东西。谁能建议最好的方法来解决这个问题?

你有责任在调用ShutdownAPI()之前确保你的请求已经完成。这通常只是在人为的"示例应用"类型场景中出现的问题,在这些场景中,您直接在main()函数中执行操作。您还需要确保在调用ShutdownAPI之前删除SQS客户端。

选项是使用std::condition_variable(信号量)在退出前同步。您可以在回调结束时将信号量传递给回调和notify_one()。然后,在关闭之前,可以在信号量上调用wait()