STLdoc
STLdocumentation
|
The Parallel Patterns Library (PPL) task
class. A task
object represents work that can be executed asynchronously, and concurrently with other tasks and parallel work produced by parallel algorithms in the Concurrency Runtime. It produces a result of type _ResultType on successful completion. Tasks of type task<void>
produce no result. A task can be waited upon and canceled independently of other tasks. It can also be composed with other tasks using continuations(then
), and join(when_all
) and choice(when_any
) patterns.
More...
#include <ppltasks.h>
Public Types | |
typedef void | result_type |
The type of the result an object of this class produces. More... | |
Public Member Functions | |
task () | |
Constructs a task object. More... | |
template<typename _Ty > | |
__declspec (noinline) explicit task(_Ty _Param | |
Constructs a task object. More... | |
return _M_unitTask | _ThenImpl (_Func, _TaskOptions) |
template<typename _Function > | |
__declspec (noinline) auto then(const _Function &_Func | |
Adds a continuation task to this task. More... | |
details::_get_internal_task_options (_TaskOptions)._set_creation_callstack(_CAPTURE_CALLSTACK()) | |
return _M_unitTask | _ThenImpl (_Func, _TaskOptions) |
task_status | wait () const |
Waits for this task to reach a terminal state. It is possible for wait to execute the task inline, if all of the tasks dependencies are satisfied, and it has not already been picked up for execution by a background worker. More... | |
void | get () const |
Returns the result this task produced. If the task is not in a terminal state, a call to get will wait for the task to finish. This method does not return a value when called on a task with a result_type of void . More... | |
bool | is_done () const |
Determines if the task is completed. More... | |
scheduler_ptr | scheduler () const |
Returns the scheduler for this task More... | |
bool | is_apartment_aware () const |
Determines whether the task unwraps a Windows Runtime IAsyncInfo interface or is descended from such a task. More... | |
bool | operator== (const task< void > &_Rhs) const |
Determines whether two task objects represent the same internal task. More... | |
bool | operator!= (const task< void > &_Rhs) const |
Determines whether two task objects represent different internal tasks. More... | |
void | _CreateImpl (details::_CancellationTokenState *_Ct, scheduler_ptr _Scheduler) |
Create an underlying task implementation. More... | |
const details::_Task_ptr< details::_Unit_type >::_Type & | _GetImpl () const |
Return the underlying implementation for this task. More... | |
void | _SetImpl (const details::_Task_ptr< details::_Unit_type >::_Type &_Impl) |
Set the implementation of the task to be the supplied implementaion. More... | |
void | _SetImpl (details::_Task_ptr< details::_Unit_type >::_Type &&_Impl) |
Set the implementation of the task to be the supplied implementaion using a move instead of a copy. More... | |
void | _SetAsync (bool _Async=true) |
Sets a property determining whether the task is apartment aware. More... | |
void | _SetTaskCreationCallstack (const details::_TaskCreationCallstack &_callstack) |
Sets a field in the task impl to the return callstack for calls to the task constructors and the then method. More... | |
template<typename _Function > | |
auto | _Then (const _Function &_Func, details::_CancellationTokenState *_PTokenState, details::_TaskInliningMode_t _InliningMode=details::_ForceInline) const -> typename details::_ContinuationTypeTraits< _Function, void >::_TaskOfType |
An internal version of then that takes additional flags and executes the continuation inline. Used for runtime internal continuations only. More... | |
Public Attributes | |
const task_options & | _TaskOptions |
cancellation_token | _CancellationToken |
Private Member Functions | |
void | _TaskInitNoFunctor (task_completion_event< void > &_Event) |
Initializes a task using a task completion event. More... | |
template<typename _Function > | |
void | _TaskInitMaybeFunctor (_Function &_Func, std::true_type) |
Initializes a task using a callable object. More... | |
template<typename _T > | |
void | _TaskInitMaybeFunctor (_T &_Param, std::false_type) |
Initializes a task using a non-callable object. More... | |
Private Attributes | |
task< details::_Unit_type > | _M_unitTask |
Friends | |
template<typename T > | |
class | task |
template<typename T > | |
class | task_completion_event |
The Parallel Patterns Library (PPL) task
class. A task
object represents work that can be executed asynchronously, and concurrently with other tasks and parallel work produced by parallel algorithms in the Concurrency Runtime. It produces a result of type _ResultType on successful completion. Tasks of type task<void>
produce no result. A task can be waited upon and canceled independently of other tasks. It can also be composed with other tasks using continuations(then
), and join(when_all
) and choice(when_any
) patterns.
For more information, see Task Parallelism (Concurrency Runtime).
typedef void Concurrency::task< void >::result_type |
The type of the result an object of this class produces.
|
inline |
Constructs a task
object.
The default constructor for a task
is only present in order to allow tasks to be used within containers. A default constructed task cannot be used until you assign a valid task to it. Methods such as get
, wait
or then
will throw an invalid_argument exception when called on a default constructed task.
A task that is created from a task_completion_event
will complete (and have its continuations scheduled) when the task completion event is set.
The version of the constructor that takes a cancellation token creates a task that can be canceled using the cancellation_token_source
the token was obtained from. Tasks created without a cancellation token are not cancelable.
Tasks created from a Windows::Foundation::IAsyncInfo
interface or a lambda that returns an IAsyncInfo
interface reach their terminal state when the enclosed Windows Runtime asynchronous operation or action completes. Similarly, tasks created from a lamda that returns a task<result_type>
reach their terminal state when the inner task reaches its terminal state, and not when the lamda returns.
task
behaves like a smart pointer and is safe to pass around by value. It can be accessed by multiple threads without the need for locks.
The constructor overloads that take a Windows::Foundation::IAsyncInfo interface or a lambda returning such an interface, are only available to Windows Store apps.
For more information, see Task Parallelism (Concurrency Runtime).
Concurrency::task< void >::__declspec | ( | noinline | ) |
Constructs a task
object.
_Ty | The type of the parameter from which the task is to be constructed. |
_Param | The parameter from which the task is to be constructed. This could be a lambda, a function object, a task_completion_event<result_type> object, or a Windows::Foundation::IAsyncInfo if you are using tasks in your Windows Store app. The lambda or function object should be a type equivalent to std::function<X(void)> , where X can be a variable of type result_type , task<result_type> , or a Windows::Foundation::IAsyncInfo in Windows Store apps. |
The default constructor for a task
is only present in order to allow tasks to be used within containers. A default constructed task cannot be used until you assign a valid task to it. Methods such as get
, wait
or then
will throw an invalid_argument exception when called on a default constructed task.
A task that is created from a task_completion_event
will complete (and have its continuations scheduled) when the task completion event is set.
The version of the constructor that takes a cancellation token creates a task that can be canceled using the cancellation_token_source
the token was obtained from. Tasks created without a cancellation token are not cancelable.
Tasks created from a Windows::Foundation::IAsyncInfo
interface or a lambda that returns an IAsyncInfo
interface reach their terminal state when the enclosed Windows Runtime asynchronous operation or action completes. Similarly, tasks created from a lamda that returns a task<result_type>
reach their terminal state when the inner task reaches its terminal state, and not when the lamda returns.
task
behaves like a smart pointer and is safe to pass around by value. It can be accessed by multiple threads without the need for locks.
The constructor overloads that take a Windows::Foundation::IAsyncInfo interface or a lambda returning such an interface, are only available to Windows Store apps.
For more information, see Task Parallelism (Concurrency Runtime).
Concurrency::task< void >::__declspec | ( | noinline | ) | const |
Adds a continuation task to this task.
_Function | The type of the function object that will be invoked by this task. |
_Func | The continuation function to execute when this task completes. This continuation function must take as input a variable of either result_type or task<result_type> , where result_type is the type of the result this task produces. |
_CancellationToken | The cancellation token to associate with the continuation task. A continuation task that is created without a cancellation token will inherit the token of its antecedent task. |
_ContinuationContext | A variable that specifies where the continuation should execute. This variable is only useful when used in a Windows Store style app. For more information, see task_continuation_context |
The overloads of then
that take a lambda or functor that returns a Windows::Foundation::IAsyncInfo interface, are only available to Windows Store apps.
For more information on how to use task continuations to compose asynchronous work, see Task Parallelism (Concurrency Runtime).
|
inline |
Create an underlying task implementation.
|
inline |
Return the underlying implementation for this task.
|
inline |
Sets a property determining whether the task is apartment aware.
|
inline |
Set the implementation of the task to be the supplied implementaion.
|
inline |
Set the implementation of the task to be the supplied implementaion using a move instead of a copy.
|
inline |
Sets a field in the task impl to the return callstack for calls to the task constructors and the then method.
|
inlineprivate |
Initializes a task using a callable object.
|
inlineprivate |
Initializes a task using a non-callable object.
|
inlineprivate |
Initializes a task using a task completion event.
|
inline |
An internal version of then that takes additional flags and executes the continuation inline. Used for runtime internal continuations only.
return _M_unitTask Concurrency::task< void >::_ThenImpl | ( | _Func | , |
_TaskOptions | |||
) |
return _M_unitTask Concurrency::task< void >::_ThenImpl | ( | _Func | , |
_TaskOptions | |||
) |
|
inline |
Returns the result this task produced. If the task is not in a terminal state, a call to get
will wait for the task to finish. This method does not return a value when called on a task with a result_type
of void
.
If the task is canceled, a call to get
will throw a task_canceled exception. If the task encountered an different exception or an exception was propagated to it from an antecedent task, a call to get
will throw that exception.
|
inline |
Determines whether the task unwraps a Windows Runtime IAsyncInfo
interface or is descended from such a task.
true
if the task unwraps an IAsyncInfo
interface or is descended from such a task, false
otherwise.
|
inline |
Determines if the task is completed.
The function returns true if the task is completed or canceled (with or without user exception).
|
inline |
Determines whether two task
objects represent different internal tasks.
true
if the objects refer to different underlying tasks, and false
otherwise.
|
inline |
Determines whether two task
objects represent the same internal task.
true
if the objects refer to the same underlying task, and false
otherwise.
|
inline |
Returns the scheduler for this task
|
inline |
Waits for this task to reach a terminal state. It is possible for wait
to execute the task inline, if all of the tasks dependencies are satisfied, and it has not already been picked up for execution by a background worker.
task_status
value which could be either completed
or canceled
. If the task encountered an exception during execution, or an exception was propagated to it from an antecedent task, wait
will throw that exception.
|
friend |
|
friend |
cancellation_token Concurrency::task< void >::_CancellationToken |
|
private |
const task_options& Concurrency::task< void >::_TaskOptions |