中断取消请求
更新时间:2024-11-08
中断取消请求
在0.8.7.4版本中,C++ SDK新增了支持请求的中断取消,允许用户另起线程来主动取消请求。本文主要介绍如何使用该功能来取消请求:
前置配置
要能够实现取消请求,除了在请求在被处理时候的操作以外,C++ SDK还需要用户请求被处理前对于相应的Client和Request在创建时配置相关变量,以防误操作取消了本不希望取消的请求。其主要配置如下:
ClientOption
:在client被创建时,如果你希望从这个client发出的请求能够支持请求取消,请在配置client的clientOption下添加如下代码:clientOption.client_enable_cancel = true;
(此处clientOption仅为举例,具体请按照自己代码中的变量名进行相应的更改)Request
:在创建请求后,请手动添加如下代码修改该请求的属性, 从而使得该请求能够支持取消:request.set_request_cancelable(true);
(此处request仅为举例,具体请按照自己代码中的变量名进行相应的更改)
请求取消
在可被取消的请求被发出后,并在处理完之前,用户可以在其他线程调用client.cancel(*request)
来进行请求取消。
简单示例
Client创建的前置配置:
ClientOptions option;
option.max_parallel = 10;
option.endpoint = "bj.bcebos.com";
option.client_enable_cancel = true;
std::string ak = "";
std::string sk = "";
Client client(ak, sk, option);
test_cancel();
发送可取消的请求并在一秒后取消:
void threadPutObject(Client* client, PutObjectRequest* request, PutObjectResponse* response){
client->put_object(*request, response);
}
void threadChangeCancel(Client* client, PutObjectRequest* request){
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
client->cancel_request(*request);
}
void test_cancel(Client& client){
FileInputStream file(g_object);
PutObjectRequest request(g_bucket, g_object, &file);
PutObjectResponse response;
request.set_request_cancelable(true);
std::thread t1(threadPutObject, &client, &request, &response);
std::thread t2(threadChangeCancel, &client, &request);
t1.join();
t2.join();
}