task_continuation_context Class

The task_continuation_context class allows you to specify where you would like a continuation to be executed. It is only useful to use this class from a Windows Runtime app. For non-Windows Runtime apps, the task continuation's execution context is determined by the runtime, and not configurable.

Syntax

class task_continuation_context : public details::_ContextCallback;

Members

Public Methods

Name Description
get_current_winrt_context Returns a task continuation context object that represents the current winrt thread context.
use_arbitrary Creates a task continuation context which allows the Runtime to choose the execution context for a continuation.
use_current Returns a task continuation context object that represents the current execution context.
use_default Creates the default task continuation context.
use_synchronous_execution Returns a task continuation context object that represents the synchronous execution context.

Inheritance Hierarchy

_ContextCallback

task_continuation_context

Requirements

Header: ppltasks.h

Namespace: concurrency

get_current_winrt_context

Returns a task continuation context object that represents the current WinRT thread context.

Syntax

static task_continuation_context get_current_winrt_context();

Return Value

The current Windows Runtime thread context. Returns an empty task_continuation_context if called from a non-Windows Runtime context.

Remarks

The get_current_winrt_context method captures the caller's Windows Runtime thread context. It returns an empty context to non-Windows Runtime callers.

The value returned by get_current_winrt_context can be used to indicate to the Runtime that the continuation should execute in the apartment model of the captured context (STA vs MTA), regardless of whether the antecedent task is apartment aware. An apartment aware task is a task that unwraps a Windows Runtime IAsyncInfo interface, or a task that is descended from such a task.

This method is similar to the use_current method, but it is also available to native C++ code without C++/CX extension support. It is intended for use by advanced users writing C++/CX-agnostic library code for both native and Windows Runtime callers. Unless you need this functionality, we recommend the use_current method, which is only available to C++/CX clients.

use_arbitrary

Creates a task continuation context which allows the Runtime to choose the execution context for a continuation.

Syntax

static task_continuation_context use_arbitrary();

Return Value

A task continuation context that represents an arbitrary location.

Remarks

When this continuation context is used the continuation will execute in a context the runtime chooses even if the antecedent task is apartment aware.

use_arbitrary can be used to turn off the default behavior for a continuation on an apartment aware task created in an STA.

This method is only available to Windows Runtime apps.

use_current

Returns a task continuation context object that represents the current execution context.

static task_continuation_context use_current();

Return Value

The current execution context.

Remarks

This method captures the caller's Windows Runtime context so that continuations can be executed in the right apartment.

The value returned by use_current can be used to indicate to the Runtime that the continuation should execute in the captured context (STA vs MTA) regardless of whether or not the antecedent task is apartment aware. An apartment aware task is a task that unwraps a Windows Runtime IAsyncInfo interface, or a task that is descended from such a task.

This method is only available to Windows Runtime apps.

use_default

Creates the default task continuation context.

static task_continuation_context use_default();

Return Value

The default continuation context.

Remarks

The default context is used if you don't specify a continuation context when you call the then method. In Windows applications for Windows 7 and below, as well as desktop applications on Windows 8 and higher, the runtime determines where task continuations will execute. However, in a Windows Runtime app, the default continuation context for a continuation on an apartment aware task is the apartment where then is invoked.

An apartment aware task is a task that unwraps a Windows Runtime IAsyncInfo interface, or a task that is descended from such a task. Therefore, if you schedule a continuation on an apartment aware task in a Windows Runtime STA, the continuation will execute in that STA.

A continuation on a non-apartment aware task will execute in a context the Runtime chooses.

task_continuation_context::use_synchronous_execution

Returns a task continuation context object that represents the synchronous execution context.

Syntax

static task_continuation_context use_synchronous_execution();

Return Value

The synchronous execution context.

Remarks

The use_synchronous_execution method forces the continuation task to run synchronously on the context, causing its antecedent task's completion.

If the antecedent task has already completed when the continuation is attached, the continuation runs synchronously on the context that attaches the continuation.

See also

concurrency Namespace