• 1000 снова выкидывает ошибку: folly :: PromiseAlreadySatisfied: обещание уже выполнено. Даже я мог бы выделить исключение, которого было бы достаточно, так как я могу использовать его в своем будущем для обработки сценария.
Как мне обойти эту проблему? Используется ли для этого какой-то шаблон дизайна?
folly::Future<bool> asyncMethodB(std::shared_ptr<folly::Promise<bool>> promise) { // <=== This could happen multiple times.
return asyncMethod()
.thenValue([promise](folly::Future<bool> result) {
bool success = std::move(result).get();
if (success) {
promise->setValue(true); // <=== This could happen multiple times.
} else {
promise->setValue(false); // <=== This could happen multiple times.
}
return success;
})
.thenError([promise](const folly::exception_wrapper& e) {
promise->setValue(false); // <=== This could happen multiple times.
return false;
});
}
void syncMethod() {
std::shared_ptr<folly::Promise<bool>> promise =
std::make_shared<folly::Promise<bool>>();
folly::Future<bool> future1 = promise->getFuture();
( Some thread pool call ) => asyncMethodB(promise);
future1.wait();
bool finalRes = future1.value();
if (!finalRes) {
throw InvalidArgumentException("Some error message");
}
LOG(INFO) << "Value in Future:" << future1.value();
}