Update about-go-task.md

This commit is contained in:
xiehan
2022-09-09 21:48:01 +08:00
committed by GitHub
parent b02fbf308e
commit 048481ee4a

View File

@@ -128,5 +128,23 @@ int main()
task->start();
...
}
~~~~~~
~~~~
# 重置go task的执行函数
在某些时候我们想在go task的执行函数里访问task如上面的例子将计算结果写入task的user_data域。
上例中我们使用了引用捕获。但明显引用捕获会有一些问题。比如task本身的生命周期。我们更希望在执行函数里直接捕获go task指针。
直接进行值捕获明显是错误的,例如:
~~~cpp
WFGoTask *task = WFTaskFactory::create_timedgo_task(1, 0, "test", [task]() {
task->user_data = (void *)123;
});
~~~
这段代码并不能在lambda函数里得到task指针因为捕获执行时task还没有赋值。但我们可以通过以下的代码实现这个需求
~~~cpp
WFGoTask *task = WFTaskFactory::create_timedgo_task(1, 0, "test", [](){});
WFTaskFactory::reset_go_task(task, [task]() {
task->user_data = (void *)123;
});
~~~
WFTaskFactory::reset_get_task()函数用于重置go task的执行函数。
因为task已经创建完毕这时候在lambda函数里捕获task就是一个正确的行为了。