mirror of
https://github.com/sogou/workflow.git
synced 2026-02-08 01:33:17 +08:00
Remove WFFacilities::ReplyGuard.
This commit is contained in:
@@ -220,17 +220,3 @@ int process(WFHttpTask *server_task)
|
||||
series_of(server_task)->push_back(task);
|
||||
}
|
||||
~~~
|
||||
但鉴于很多用户不想了解series用法,我们加入一个便利类ReplyGuard,让用户可以在任何时候回复请求,用法如下:
|
||||
~~~cpp
|
||||
int process(WFHttpTask *server_task)
|
||||
{
|
||||
auto *guard = new WFFacilities::ReplyGuard(server_task);
|
||||
WFHttpTask *task = WFTaskFactory::create_http_task(..., [guard, server_task]{WFHttpTask *task) {
|
||||
*server_task->get_resp() = std::move(*task->get_resp());
|
||||
delete guard; // 此时server才会回复。
|
||||
});
|
||||
task->start();
|
||||
}
|
||||
~~~
|
||||
WFFacilities::ReplyGuard用于阻止一个server task的回复,只有这个guard被析构,才会触发回复。
|
||||
使用ReplyGuard一般不影响原server task series的使用,用户依然可以push_back任务。但**避免再调用series的cancel()**。
|
||||
|
||||
@@ -78,28 +78,6 @@ public:
|
||||
WFFuture<void> future;
|
||||
};
|
||||
|
||||
public:
|
||||
class ReplyGuard
|
||||
{
|
||||
public:
|
||||
ReplyGuard(SubTask *server_task)
|
||||
{
|
||||
SeriesWork *series = series_of(server_task);
|
||||
assert(series);
|
||||
assert(server_task == series->get_last_task());
|
||||
this->cond = WFTaskFactory::create_conditional(server_task);
|
||||
series->set_last_task(this->cond);
|
||||
}
|
||||
|
||||
~ReplyGuard()
|
||||
{
|
||||
this->cond->signal(NULL);
|
||||
}
|
||||
|
||||
private:
|
||||
WFConditional *cond;
|
||||
};
|
||||
|
||||
private:
|
||||
static void __timer_future_callback(WFTimerTask *task);
|
||||
static void __fio_future_callback(WFFileIOTask *task);
|
||||
|
||||
Reference in New Issue
Block a user