24 #ifndef FUTURECOROUTINE_HPP__
25 #define FUTURECOROUTINE_HPP__
30 #include <logger/Logger.hpp>
31 #include <oatpp/core/async/Coroutine.hpp>
38 extern const std::chrono::milliseconds FutureCoroutineMaxInterval;
42 public oatpp::async::CoroutineWithResult<FutureCoroutine<T>, const T &>
45 typedef oatpp::async::CoroutineWithResult<FutureCoroutine<T>,
const T &>
52 oatpp::async::Action act()
override
55 return oatpp::async::AbstractCoroutine::error<oatpp::async::Error>(
57 else if (future.wait_for(std::chrono::seconds(0)) ==
58 std::future_status::ready)
59 return CoroutineWithResult::_return(future.get());
62 if (delay < FutureCoroutineMaxInterval)
63 delay = std::chrono::milliseconds(delay.count() << 1);
64 return CoroutineWithResult::waitRepeat(delay);
68 std::chrono::milliseconds delay{1};
69 std::shared_future<T> future;
74 public oatpp::async::Coroutine<FutureCoroutine<void>>
84 return error<Error>(
"failed");
85 else if (future.wait_for(std::chrono::seconds(0)) ==
86 std::future_status::ready)
93 if (delay < FutureCoroutineMaxInterval)
94 delay = std::chrono::milliseconds(delay.count() << 1);
95 return waitRepeat(delay);
99 std::chrono::milliseconds delay{1};
100 std::shared_future<void> future;
104 oatpp::async::CoroutineStarterForResult<const T &> wait(
105 const std::shared_future<T> &future)
110 inline oatpp::async::CoroutineStarter wait(
const std::shared_future<void> &future)
112 return new FutureCoroutine<void>(future);
main motion-lib namespace