D++ (DPP)
C++ Discord API Bot Library
dpp::detail::job::promise< Args > Struct Template Reference

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 >
await_transform (T &&expr) const noexcept
 Function that will wrap every co_await inside of the job. More...
 

Detailed Description

template<typename... Args>
struct dpp::detail::job::promise< Args >

Coroutine promise type for a job.

Member Function Documentation

◆ await_transform()

template<typename... Args>
template<typename T >
T dpp::detail::job::promise< Args >::await_transform ( T &&  expr) const
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.

◆ final_suspend()

template<typename... Args>
std_coroutine::suspend_never dpp::detail::job::promise< Args >::final_suspend ( ) const
inlinenoexcept

◆ get_return_object()

template<typename... Args>
dpp::job dpp::detail::job::promise< Args >::get_return_object ( ) const
inlinenoexcept

Function called to get the job object.

Returns
job

◆ initial_suspend()

template<typename... Args>
std_coroutine::suspend_never dpp::detail::job::promise< Args >::initial_suspend ( ) const
inlinenoexcept

◆ return_void()

template<typename... Args>
void dpp::detail::job::promise< Args >::return_void ( ) const
inlinenoexcept

Function called when the job returns. Does nothing.

◆ unhandled_exception()

template<typename... Args>
void dpp::detail::job::promise< Args >::unhandled_exception ( ) const
inline

Function called when an exception is thrown and not caught.

Exceptions
Immediatelyrethrows the exception to the caller / resumer
D++ Library version 10.0.35D++ Library version 10.0.34D++ Library version 10.0.33D++ Library version 10.0.32D++ Library version 10.0.31D++ Library version 10.0.30D++ Library version 10.0.29D++ Library version 10.0.28D++ Library version 10.0.27D++ Library version 10.0.26D++ Library version 10.0.25D++ Library version 10.0.24D++ Library version 10.0.23D++ Library version 10.0.22D++ Library version 10.0.21D++ Library version 10.0.20D++ Library version 10.0.19D++ Library version 10.0.18D++ Library version 10.0.17D++ Library version 10.0.16D++ Library version 10.0.15D++ Library version 10.0.14D++ Library version 10.0.13D++ Library version 10.0.12D++ Library version 10.0.11D++ Library version 10.0.10D++ Library version 10.0.9D++ Library version 10.0.8D++ Library version 10.0.7D++ Library version 10.0.6D++ Library version 10.0.5D++ Library version 10.0.4D++ Library version 10.0.3D++ Library version 10.0.2D++ Library version 10.0.1D++ Library version 10.0.0D++ Library version 9.0.19D++ Library version 9.0.18D++ Library version 9.0.17D++ Library version 9.0.16D++ Library version 9.0.15D++ Library version 9.0.14D++ Library version 9.0.13D++ Library version 9.0.12D++ Library version 9.0.11D++ Library version 9.0.10D++ Library version 9.0.9D++ Library version 9.0.8D++ Library version 9.0.7D++ Library version 9.0.6D++ Library version 9.0.5D++ Library version 9.0.4D++ Library version 9.0.3D++ Library version 9.0.2D++ Library version 9.0.1D++ Library version 9.0.0D++ Library version 1.0.2D++ Library version 1.0.1D++ Library version 1.0.0