cesium-native
0.41.0
|
A value that will be available in the future, as produced by AsyncSystem. Unlike Future, a SharedFuture
allows multiple continuations to be attached, and allows SharedFuture::wait to be called multiple times.
More...
#include <CesiumAsync/SharedFuture.h>
Public Member Functions | |
template<typename Func > | |
CesiumImpl::ContinuationFutureType_t< Func, T > | thenInWorkerThread (Func &&f) |
Registers a continuation function to be invoked in a worker thread when this Future resolves. More... | |
template<typename Func > | |
CesiumImpl::ContinuationFutureType_t< Func, T > | thenInMainThread (Func &&f) |
Registers a continuation function to be invoked in the main thread when this Future resolves. More... | |
template<typename Func > | |
CesiumImpl::ContinuationFutureType_t< Func, T > | thenImmediately (Func &&f) |
Registers a continuation function to be invoked immediately in whichever thread causes the Future to be resolved. More... | |
template<typename Func > | |
CesiumImpl::ContinuationFutureType_t< Func, T > | thenInThreadPool (const ThreadPool &threadPool, Func &&f) |
Registers a continuation function to be invoked in a thread pool when this Future resolves. More... | |
template<typename Func > | |
Future< T > | catchInMainThread (Func &&f) |
Registers a continuation function to be invoked in the main thread when this Future rejects. More... | |
template<typename Func > | |
Future< T > | catchImmediately (Func &&f) |
Registers a continuation function to be invoked immediately, and invalidates this Future. More... | |
template<typename... TPassThrough> | |
Future< std::tuple< TPassThrough..., T > > | thenPassThrough (TPassThrough &&... values) |
Passes through one or more additional values to the next continuation. More... | |
template<typename U = T, std::enable_if_t< std::is_same_v< U, T >, int > = 0, std::enable_if_t<!std::is_same_v< U, void >, int > = 0> | |
const U & | wait () const |
Waits for the future to resolve or reject and returns the result. More... | |
template<typename U = T, std::enable_if_t< std::is_same_v< U, T >, int > = 0, std::enable_if_t< std::is_same_v< U, void >, int > = 0> | |
void | wait () const |
T | waitInMainThread () |
Waits for this future to resolve or reject in the main thread while also processing main-thread tasks. More... | |
bool | isReady () const |
Determines if this future is already resolved or rejected. More... | |
Friends | |
class | AsyncSystem |
template<typename R > | |
struct | CesiumImpl::ParameterizedTaskUnwrapper |
struct | CesiumImpl::TaskUnwrapper |
template<typename R > | |
class | Future |
A value that will be available in the future, as produced by AsyncSystem. Unlike Future, a SharedFuture
allows multiple continuations to be attached, and allows SharedFuture::wait to be called multiple times.
T | The type of the value. |
Definition at line 31 of file SharedFuture.h.
|
inline |
Registers a continuation function to be invoked immediately, and invalidates this Future.
When this Future is rejected, the continuation function will be invoked in whatever thread does the rejection. Similarly, if the Future is already rejected when catchImmediately
is called, the continuation function will be invoked immediately before this method returns.
If the function itself returns a Future
, the function will not be considered complete until that returned Future
also resolves.
Any then
continuations chained after this one will be invoked with the return value of the catch callback.
Func | The type of the function. |
f | The function. |
Definition at line 184 of file SharedFuture.h.
|
inline |
Registers a continuation function to be invoked in the main thread when this Future rejects.
If this Future is rejected from the main thread, the continuation function will be invoked immediately rather than queued for later execution in the main thread. Similarly, if the Future is already rejected when catchInMainThread
is called from the main thread, the continuation function will be invoked immediately before this method returns.
If the function itself returns a Future
, the function will not be considered complete until that returned Future
also resolves.
Any then
continuations chained after this one will be invoked with the return value of the catch callback.
Func | The type of the function. |
f | The function. |
Definition at line 159 of file SharedFuture.h.
|
inline |
Determines if this future is already resolved or rejected.
If this method returns true, it is guaranteed that wait will not block but will instead immediately return a value or throw an exception.
Definition at line 270 of file SharedFuture.h.
|
inline |
Registers a continuation function to be invoked immediately in whichever thread causes the Future to be resolved.
If the Future is already resolved, the supplied function will be called immediately in the calling thread and this method will not return until that function does.
If the function itself returns a Future
, the function will not be considered complete until that returned Future
also resolves.
Func | The type of the function. |
f | The function. |
Definition at line 101 of file SharedFuture.h.
|
inline |
Registers a continuation function to be invoked in the main thread when this Future resolves.
If this Future is resolved from the main thread, the continuation function will be invoked immediately rather than queued for later execution in the main thread. Similarly, if the Future is already resolved when thenInMainThread
is called from the main thread, the continuation function will be invoked immediately before this method returns.
If the function itself returns a Future
, the function will not be considered complete until that returned Future
also resolves.
Func | The type of the function. |
f | The function. |
Definition at line 78 of file SharedFuture.h.
|
inline |
Registers a continuation function to be invoked in a thread pool when this Future resolves.
If the function itself returns a Future
, the function will not be considered complete until that returned Future
also resolves.
If this Future is resolved from a thread pool thread, the continuation function will be invoked immediately rather than in a separate task. Similarly, if the Future is already resolved when thenInThreadPool
is called from a designated thread pool thread, the continuation function will be invoked immediately before this method returns.
Func | The type of the function. |
f | The function. |
Definition at line 131 of file SharedFuture.h.
|
inline |
Registers a continuation function to be invoked in a worker thread when this Future resolves.
If the function itself returns a Future
, the function will not be considered complete until that returned Future
also resolves.
If this Future is resolved from a designated worker thread, the continuation function will be invoked immediately rather than in a separate task. Similarly, if the Future is already resolved when thenInWorkerThread
is called from a designated worker thread, the continuation function will be invoked immediately before this method returns.
Func | The type of the function. |
f | The function. |
Definition at line 52 of file SharedFuture.h.
|
inline |
Passes through one or more additional values to the next continuation.
The next continuation will receive a tuple with each of the provided values, followed by the result of the current Future.
TPassThrough | The types to pass through to the next continuation. |
value | The values to pass through to the next continuation. |
Definition at line 204 of file SharedFuture.h.
|
inline |
Waits for the future to resolve or reject and returns the result.
This method must not be called from the main thread, the one that calls AsyncSystem::dispatchMainThreadTasks. Doing so can lead to a deadlock because the main thread tasks will never complete while this method is blocking the main thread.
To wait in the main thread, use waitInMainThread instead.
An | exception if the future rejected. |
Definition at line 229 of file SharedFuture.h.
|
inline |
Waits for this future to resolve or reject in the main thread while also processing main-thread tasks.
This method must be called from the main thread.
The function does not return until Future::isReady returns true. In the meantime, main-thread tasks are processed as necessary. This method does not spin wait; it suspends the calling thread by waiting on a condition variable when there is no work to do.
An | exception if the future rejected. |
Definition at line 255 of file SharedFuture.h.