使用AWS-cpp-sdk时,在退出程序之前等待异步调用返回
Wait for async calls to return before exiting program when using AWS-cpp-sdk
我正在做关于使用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()
。
相关文章:
- 如何在C++中实现带有packaged_task的异步等待循环?
- C++异步编程,如何不等待未来
- 如何使用 Boost.Asio 正确实现异步/等待语法
- boost上的多个递归异步等待
- 在 UWP 应用程序中,future.wait() 在尝试同步来自异步方法的响应时继续等待
- 如果您所做的只是等待它完成,为什么要使用异步
- 如何在C++中创建异步/等待代码
- 有没有办法异步等待 Boost Asio 的未来
- 如果一个basic_waitable_timer在仍有异步操作等待的情况下被销毁,该怎么办
- 等待异步请求完成
- 异步等待,直到在Asio中有一个套接字可用于读/写
- 等待句柄/事件异步或回调在同一线程内
- c++: Boost::asio:在同一个函数中等待异步处理程序
- 使用AWS-cpp-sdk时,在退出程序之前等待异步调用返回
- 我如何执行一个c++函数异步而不是阻塞/等待
- 异步等待一个条件变量
- C++等待所有异步操作结束
- 等待异步方法完成
- 使用异步方法vs线程等待
- 等待多个异步任务完成