C++ 中的 then
函数通常与并发编程和异步任务处理相关
std::future<int> task1 = std::async([]() { return 42; });
std::future<int> task2 = task1.then([](std::future<int> f) {
int result = f.get(); // 获取 task1 的结果
return result * 2;
});
std::future<int> taskA = std::async([]() { return 42; });
std::future<int> taskB = std::async([]() { return 100; });
std::future<int> combinedTask = taskA.then([&](std::future<int> f) {
int resultA = f.get();
return taskB.then([resultA](std::future<int> g) {
int resultB = g.get();
return resultA + resultB;
});
});
then
函数处理异步任务中可能发生的异常。std::future<int> fallibleTask = std::async([]() {
if (/* some condition */) {
throw std::runtime_error("An error occurred");
}
return 42;
});
std::future<void> errorHandledTask = fallibleTask.then([](std::future<int> f) {
try {
int result = f.get(); // 获取原始任务的结果,如果有异常,将在这里抛出
} catch (const std::exception& e) {
// 处理异常
std::cerr << "Error: " << e.what()<< std::endl;
}
});
struct Task {
std::function<void()> work;
int priority;
};
std::priority_queue<Task, std::vector<Task>, std::greater<Task>> taskQueue;
// 添加任务到队列
taskQueue.push({[]() { /* low priority work */ }, 1});
taskQueue.push({[]() { /* high priority work */ }, 0});
// 执行任务
while (!taskQueue.empty()) {
Task task = taskQueue.top();
taskQueue.pop();
task.work();
}
这些示例展示了 C++ 中 then
函数在并发编程中的一些应用场景。实际上,then
函数提供了一种简洁、表达力强的方式来处理异步任务之间的依赖关系,以及任务的组合、错误处理和优先级调度等问题。