Класс task (среда выполнения с параллелизмом)
Класс task
библиотеки параллельных шаблонов (PPL). task
Объект представляет работу, которая может выполняться асинхронно и параллельно с другими задачами и параллельной работой, созданной параллельными алгоритмами в среде выполнения параллелизма. При успешном завершении он выводи результат типа _ResultType
. Задачи типа task<void>
никакого результата не дают. Задачи можно ожидать и отменять независимо от других задач. Она также может быть составлена с другими задачами с помощью продолжений (then
), а также шаблоны join() и choice(when_all
when_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
Значение 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
присутствует только для того, чтобы задачи могли использоваться внутри контейнеров. Собранную задачу по умолчанию невозможно использовать до тех пор, пока ей не будет присвоена допустимая задача. Такие методы, как get
wait
, или then
вызовет исключение invalid_argument при вызове созданной по умолчанию задачи.
Задача, которая создается из task_completion_event
, завершится (и ее продолжения будут запланированы), если событие завершения задачи установлено.
Версия конструктора, принимающего токен отмены, создает задачу, которую можно отменить с помощью cancellation_token_source
, из которого был получен токен. Задачи, созданные без токена отмены, не могут быть отменены.
Задачи, созданные из интерфейса Windows::Foundation::IAsyncInfo
или лямбда-выражения, которое возвращает интерфейс IAsyncInfo
, достигают своего конечного состояния при завершении вложенной асинхронной операции или действия среды выполнения Windows. Аналогичным образом задачи, созданные из лямбда-лямбда,которые возвращают task<result_type>
состояние терминала, когда внутренняя задача достигает своего состояния терминала, а не когда лямбда возвращается.
task
ведет себя подобно интеллектуальному указателю, и ее можно безопасно передавать по значению. К ней также может быть получен доступ несколькими потоками без необходимости использования блокировки.
Перегрузки конструктора, принимающие интерфейс Windows::Foundation::IAsyncInfo или лямбда-возвращающие такой интерфейс, доступны только для среда выполнения Windows приложений.
Дополнительные сведения см. в разделе "Параллелизм задач".
then …
Добавляет задачу продолжения к этой задаче.
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 для получения результата из предшествующей задачи в потоке задач.