D++ (DPP)
C++ Discord API Bot Library
|
Coroutine promise type for a job. More...
#include <job.h>
Public Member Functions | |
std_coroutine::suspend_never | final_suspend () const noexcept |
std_coroutine::suspend_never | initial_suspend () const noexcept |
dpp::job | get_return_object () const noexcept |
Function called to get the job object. More... | |
void | unhandled_exception () const |
Function called when an exception is thrown and not caught. More... | |
void | return_void () const noexcept |
Function called when the job returns. Does nothing. More... | |
template<typename T > | |
T | await_transform (T &&expr) const noexcept |
Function that will wrap every co_await inside of the job. More... | |
Coroutine promise type for a job.
|
inlinenoexcept |
Function that will wrap every co_await inside of the job.
job
is extremely efficient as a coroutine but this comes with drawbacks : It cannot be co_awaited, which means the second it co_awaits something, the program jumps back to the calling function, which continues executing. At this point, if the function returns, every object declared in the function including its parameters are destroyed, which causes dangling references. This is exactly the same problem as references in lambdas : https://dpp.dev/lambdas-and-locals.html.
If you must pass a reference, pass it as a pointer or with std::ref, but you must fully understand the reason behind this warning, and what to avoid. If you prefer a safer type, use coroutine
for synchronous execution, or task
for parallel tasks, and co_await them.
|
inlinenoexcept |
|
inlinenoexcept |
Function called to get the job object.
|
inlinenoexcept |
|
inlinenoexcept |
Function called when the job returns. Does nothing.
|
inline |
Function called when an exception is thrown and not caught.
Immediately | rethrows the exception to the caller / resumer |