Класс task (среда выполнения с параллелизмом)

Класс task библиотеки параллельных шаблонов (PPL). task Объект представляет работу, которая может выполняться асинхронно и параллельно с другими задачами и параллельной работой, созданной параллельными алгоритмами в среде выполнения параллелизма. При успешном завершении он выводи результат типа _ResultType. Задачи типа task<void> никакого результата не дают. Задачи можно ожидать и отменять независимо от других задач. Она также может быть составлена с другими задачами с помощью продолжений (then), а также шаблоны join() и choice(when_allwhen_any). Когда объект задачи назначается новой переменной, поведение заключается std::shared_ptrв том, что оба объекта представляют одну и ту же базовую задачу.

Синтаксис

template <>
class task<void>;

template<typename _ResultType>
class task;

Параметры

_ResultType
Тип результата, создаваемого задачей.

Участники

Общедоступные определения типов

Имя Описание
result_type Тип результата, выводимого объектом этого класса.

Открытые конструкторы

Имя Описание
Задача Перегружен. Формирует объект task.

Открытые методы

Имя Описание
get Перегружен. Возвращает результат, созданный этой задачей. Если задача не находится в конечном состоянии, вызов get будет ожидать завершения задачи. Этот метод не возвращает значение при вызове для задачи с параметром result_type, имеющим значение void.
is_apartment_aware Определяет, распаковывает ли задача интерфейс среды выполнения Windows IAsyncInfo или происходит от такой задачи.
is_done Определяет, завершена ли задача.
Планировщик Возвращает планировщик для этой задачи
then Перегружен. Добавляет задачу продолжения к этой задаче.
Подожди Ожидает, когда эта задача достигнет конечного состояния. У wait существует возможность выполнения задачи встроенным образом, если все зависимости задач удовлетворены, и она еще не взята для выполнения фоновым рабочим процессом.

Открытые операторы

Имя Описание
оператор!= Перегружен. Определяет, представляют ли два объекта task различные внутренние задачи.
operator= Перегружен. Заменяет содержимое одного объекта task другим.
operator== Перегружен. Определяет, представляют ли два объекта task одну и ту же внутреннюю задачу.

Замечания

Дополнительные сведения см. в разделе "Параллелизм задач".

Иерархия наследования

task

Требования

Заголовок: ppltasks.h

Пространство имен: concurrency

get

Возвращает результат, созданный этой задачей. Если задача не находится в конечном состоянии, вызов get будет ожидать завершения задачи. Этот метод не возвращает значение при вызове для задачи с параметром result_type, имеющим значение void.

_ResultType get() const;

void get() const;

Возвращаемое значение

Результат задачи.

Замечания

Если задача отменена, вызов get вызовет исключение task_canceled . Если задача встретила другое исключение или исключение было распространено на нее из предшествующей задачи, вызов get создаст это исключение.

Важно!

В приложении универсальная платформа Windows (UWP) не вызывайте параллелизм::task::wait или get ( wait вызовыget) в коде, работающем в потоке пользовательского интерфейса. В противном случае среда выполнения создает параллелизм::invalid_operation , так как эти методы блокируют текущий поток и могут привести к тому, что приложение не отвечает. Однако можно вызвать get метод, чтобы получить результат задачи antecedent в продолжении на основе задач, так как результат доступен немедленно.

is_apartment_aware

Определяет, распаковывает ли задача интерфейс среды выполнения Windows IAsyncInfo или происходит от такой задачи.

bool is_apartment_aware() const;

Возвращаемое значение

true Значение IAsyncInfo >, если задача распаковывает интерфейс или нисходит от такой задачи, false в противном случае.

Метод task::is_done (среда выполнения параллелизма)

Определяет, завершена ли задача.

bool is_done() const;

Возвращаемое значение

Значение True, если задача завершена, значение false в противном случае.

Замечания

Функция возвращает значение true, если задача завершена или отменена (с или без исключения пользователя).

оператор!=

Определяет, представляют ли два объекта task различные внутренние задачи.

bool operator!= (const task<_ResultType>& _Rhs) const;

bool operator!= (const task<void>& _Rhs) const;

Параметры

_Rhs
Задача для сравнения.

Возвращаемое значение

true Значение , если объекты ссылаются на различные базовые задачи и false в противном случае.

operator=

Заменяет содержимое одного объекта task другим.

task& operator= (const task& _Other);

task& operator= (task&& _Other);

Параметры

_Other
Исходный объект task.

Возвращаемое значение

Замечания

Поскольку task действует как интеллектуальный указатель, после назначения копии эти объекты task представляют ту же фактическую задачу, что и _Other.

operator==

Определяет, представляют ли два объекта task одну и ту же внутреннюю задачу.

bool operator== (const task<_ResultType>& _Rhs) const;

bool operator== (const task<void>& _Rhs) const;

Параметры

_Rhs
Задача для сравнения.

Возвращаемое значение

true Значение , если объекты ссылаются на ту же базовую задачу и false в противном случае.

Метод task::scheduler (среда выполнения параллелизма)

Возвращает планировщик для этой задачи

scheduler_ptr scheduler() const;

Возвращаемое значение

Указатель на планировщик

SqlAzureDacpacDeployment

Формирует объект task.

task();

template<typename T>
__declspec(
    noinline) explicit task(T _Param);

template<typename T>
__declspec(
    noinline) explicit task(T _Param, const task_options& _TaskOptions);

task(
    const task& _Other);

task(
    task&& _Other);

Параметры

T
Тип параметра, из которого будет создаваться задача.

_Param
Параметр, из которого будет создаваться задача. Это может быть лямбда-объект, объект функции, task_completion_event<result_type> объект или Windows::Foundation::IAsyncInfo, если вы используете задачи в приложении среда выполнения Windows. Лямбда-объект или объект-функция должен быть типом, эквивалентным std::function<X(void)>типу, где X может быть переменной типаresult_type, task<result_type>или Windows::Foundation::IAsyncInfo в приложениях среда выполнения Windows.

_TaskOptions
Параметры задачи включают токен отмены, планировщик и др.

_Other
Исходный объект task.

Замечания

Конструктор по умолчанию для task присутствует только для того, чтобы задачи могли использоваться внутри контейнеров. Собранную задачу по умолчанию невозможно использовать до тех пор, пока ей не будет присвоена допустимая задача. Такие методы, как getwait , или then вызовет исключение invalid_argument при вызове созданной по умолчанию задачи.

Задача, которая создается из task_completion_event, завершится (и ее продолжения будут запланированы), если событие завершения задачи установлено.

Версия конструктора, принимающего токен отмены, создает задачу, которую можно отменить с помощью cancellation_token_source, из которого был получен токен. Задачи, созданные без токена отмены, не могут быть отменены.

Задачи, созданные из интерфейса Windows::Foundation::IAsyncInfo или лямбда-выражения, которое возвращает интерфейс IAsyncInfo, достигают своего конечного состояния при завершении вложенной асинхронной операции или действия среды выполнения Windows. Аналогичным образом задачи, созданные из лямбда-лямбда,которые возвращают task<result_type> состояние терминала, когда внутренняя задача достигает своего состояния терминала, а не когда лямбда возвращается.

task ведет себя подобно интеллектуальному указателю, и ее можно безопасно передавать по значению. К ней также может быть получен доступ несколькими потоками без необходимости использования блокировки.

Перегрузки конструктора, принимающие интерфейс Windows::Foundation::IAsyncInfo или лямбда-возвращающие такой интерфейс, доступны только для среда выполнения Windows приложений.

Дополнительные сведения см. в разделе "Параллелизм задач".

а затем —

Добавляет задачу продолжения к этой задаче.

template<typename _Function>
__declspec(
    noinline) auto then(const _Function& _Func) const -> typename details::_ContinuationTypeTraits<_Function,
    _ResultType>::_TaskOfType;

template<typename _Function>
__declspec(
    noinline) auto then(const _Function& _Func,
    const task_options& _TaskOptions) const -> typename details::_ContinuationTypeTraits<_Function,
    _ResultType>::_TaskOfType;

template<typename _Function>
__declspec(
    noinline) auto then(const _Function& _Func,
    cancellation_token _CancellationToken,
    task_continuation_context _ContinuationContext) const -> typename details::_ContinuationTypeTraits<_Function,
    _ResultType>::_TaskOfType;

template<typename _Function>
__declspec(
    noinline) auto then(const _Function& _Func,
    const task_options& _TaskOptions = task_options()) const -> typename details::_ContinuationTypeTraits<_Function,
    void>::_TaskOfType;

template<typename _Function>
__declspec(
    noinline) auto then(const _Function& _Func,
    cancellation_token _CancellationToken,
    task_continuation_context _ContinuationContext) const -> typename details::_ContinuationTypeTraits<_Function,
    void>::_TaskOfType;

Параметры

_Функции
Тип объекта функции, который будет вызываться этой задачей.

_Func
Функция продолжения, которая должна быть выполнена по завершении этой задачи. Эта функция продолжения должна принимать в качестве входных данных переменную типа result_type или task<result_type>, где result_type — тип результата, который создает эта задача.

_TaskOptions
Параметры задачи включают токен отмены, планировщик и контекст продолжения. По умолчанию предыдущие 3 параметра наследуются от предшествующей задачи

_CancellationToken
Токен отмены, который необходимо связать с задачей продолжения. Задача продолжения, созданная без токена отмены, унаследует токен своей предшествующей задачи.

_ContinuationContext
Переменная, указывающая, где должно выполняться продолжение. Эта переменная полезна только при использовании в приложении UWP. Дополнительные сведения см. в task_continuation_context

Возвращаемое значение

Вновь созданная задача продолжения. Тип результата возвращаемой задачи определяется значением, возвращаемым _Func.

Замечания

Перегрузкиthen, которые принимают лямбда-или functor, возвращающие интерфейс Windows::Foundation::IAsyncInfo, доступны только для среда выполнения Windows приложений.

Дополнительные сведения об использовании продолжения задач для создания асинхронной работы см. в разделе "Параллелизм задач".

wait

Ожидает, когда эта задача достигнет конечного состояния. У wait существует возможность выполнения задачи встроенным образом, если все зависимости задач удовлетворены, и она еще не взята для выполнения фоновым рабочим процессом.

task_status wait() const;

Возвращаемое значение

Значение task_status, которое может быть completed или canceled. Если задача встретила исключение во время выполнения или исключение было распространено на нее из предшествующей задачи, wait вызывает это исключение.

Замечания

Важно!

В приложении универсальная платформа Windows (UWP) не вызывайте wait код, который выполняется в потоке пользовательского интерфейса. В противном случае среда выполнения создает concurrency::invalid_operation так как этот метод блокирует текущий поток и может вызвать зависание приложения. Тем не менее можно вызвать метод concurrency::task::get для получения результата из предшествующей задачи в потоке задач.

См. также

Пространство имен concurrency