Класс task (среда выполнения с параллелизмом)
Класс task библиотеки параллельных шаблонов (PPL). task Объект представляет работу, которая может выполняться асинхронно и параллельно с другими задачами и параллельной работой, созданной параллельными алгоритмами в среде выполнения параллелизма. При успешном завершении он выводи результат типа _ResultType . Задачи типа task никакого результата не дают. Задачи можно ожидать и отменять независимо от других задач. Она также может быть составлена с другими задачами с помощью продолжений ( then ), а также шаблоны join() и choice( when_all when_any ). Когда объект задачи назначается новой переменной, поведение заключается std::shared_ptr в том, что оба объекта представляют одну и ту же базовую задачу.
Синтаксис
template <> class task; template 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 одну и ту же внутреннюю задачу. |
Замечания
Дополнительные сведения см. в разделе «Параллелизм задач».
Иерархия наследования
Требования
Заголовок: 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& _Rhs) const; bool operator!= (const task& _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& _Rhs) const; bool operator== (const task& _Rhs) const;
Параметры
_Rhs
Задача для сравнения.
Возвращаемое значение
true Значение , если объекты ссылаются на ту же базовую задачу и false в противном случае.
Метод task::scheduler (среда выполнения параллелизма)
Возвращает планировщик для этой задачи
scheduler_ptr scheduler() const;
Возвращаемое значение
Указатель на планировщик
SqlAzureDacpacDeployment
Формирует объект task .
task(); template __declspec( noinline) explicit task(T _Param); template __declspec( noinline) explicit task(T _Param, const task_options& _TaskOptions); task( const task& _Other); task( task&& _Other);
Параметры
T
Тип параметра, из которого будет создаваться задача.
_Param
Параметр, из которого будет создаваться задача. Это может быть лямбда-объект, объект функции, task_completion_event объект или Windows::Foundation::IAsyncInfo, если вы используете задачи в приложении среда выполнения Windows. Лямбда-объект или объект-функция должен быть типом, эквивалентным std::function типу, где X может быть переменной типа result_type , task или 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 состояние терминала, когда внутренняя задача достигает своего состояния терминала, а не когда лямбда возвращается.
task ведет себя подобно интеллектуальному указателю, и ее можно безопасно передавать по значению. К ней также может быть получен доступ несколькими потоками без необходимости использования блокировки.
Перегрузки конструктора, принимающие интерфейс Windows::Foundation::IAsyncInfo или лямбда-возвращающие такой интерфейс, доступны только для среда выполнения Windows приложений.
Дополнительные сведения см. в разделе «Параллелизм задач».
а затем —
Добавляет задачу продолжения к этой задаче.
template __declspec( noinline) auto then(const _Function& _Func) const -> typename details::_ContinuationTypeTraits::_TaskOfType; template __declspec( noinline) auto then(const _Function& _Func, const task_options& _TaskOptions) const -> typename details::_ContinuationTypeTraits::_TaskOfType; template __declspec( noinline) auto then(const _Function& _Func, cancellation_token _CancellationToken, task_continuation_context _ContinuationContext) const -> typename details::_ContinuationTypeTraits::_TaskOfType; template __declspec( noinline) auto then(const _Function& _Func, const task_options& _TaskOptions = task_options()) const -> typename details::_ContinuationTypeTraits::_TaskOfType; template __declspec( noinline) auto then(const _Function& _Func, cancellation_token _CancellationToken, task_continuation_context _ContinuationContext) const -> typename details::_ContinuationTypeTraits::_TaskOfType;
Параметры
_Функции
Тип объекта функции, который будет вызываться этой задачей.
_Func
Функция продолжения, которая должна быть выполнена по завершении этой задачи. Эта функция продолжения должна принимать в качестве входных данных переменную типа result_type или task , где 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 для получения результата из предшествующей задачи в потоке задач.
Что значит Task, когда говорят о языке программирования?
Доброй ночи, подскажите.
Как таковой Task перевело — задание.
Но как оно переводится по отношению к языку программирования?
- Вопрос задан более трёх лет назад
- 15172 просмотра
Комментировать
Решения вопроса 4
Зависит от конкретого языка программирования.
В некоторых языках этот термин не используется в самом языке — значит, относится в организации труда «задача, которую нужно решить».
В некоторых языках этот термин означает параллельно запускаемый поток выполнения.
Зачем нужен таск-трекер и баг-трекер
Если вам доведётся работать в компании крупнее чем три человека, наверняка часть работы будет в таск-трекере. Сейчас покажем, что это такое.
Что такое таск-трекер
Таск-трекер — это калька с английского task tracker, что переводится как «отслеживание задач». Это то место, куда стекаются и где распределяются все задачи между всеми программистами. Там же может храниться вспомогательная информация по каждой задаче, вестись обсуждение, плестись интриги, разворачиваться семейные драмы.
В общем, таск-трекер — это бесконечная мучительная планёрка для айтишников. Или не мучительная.
Бизнес-процессы в таск-трекере
Часто таск-трекер настраивают так, что задачи автоматически двигаются между разными участниками в зависимости от их роли в команде. Например, это может быть так:
- У фронтенд-разработчика появляется в трекере задача «Добавить стиль для новой кнопки поиска в меню».
- Фронт берёт её в работу, делает и нажимает в трекере внутри задачи кнопку «Готово».
- Задача относится к категории «Фронтенд», поэтому она автоматически попадает в работу к тестировщику сайта. Срок выполнения тоже меняется автоматически.
- Тестировщик открывает задачу, смотрит, что от него нужно, и идёт прогонять новый стиль через тесты.
- Если все тесты прошли удачно — он закрывает задачу и она улетает дальше в отдел релизов. Если тест не пройден — в задачу ставится пометка и она снова возвращается фронтендеру, который ей занимался.
При этом продвинутые таск-трекеры следят за кучей параметров: как долго задачи были в работе, сколько сделано сразу, сколько вернулось, кто самый результативный и так далее. Этим часто пользуются менеджеры, когда им нужно оптимизировать процесс разработки и найти слабые места.
Таск-трекеры могут интегрироваться с другими системами: гитами, средами тестирования, средами разработки и т. д. Это нужно для крупных компаний, где любой шаг нужно стандартизировать.
Что такое баг-трекер
Баг-трекер — это трекер багов или ошибок, которые нужно исправить в программе. Там есть много из того, что есть в таск-трекере:
- задача (описание ошибки),
- степень критичности,
- когда появилась,
- кто ответственный.
Также считается хорошим тоном добавить в описание ошибки то, как её можно воспроизвести, — так программисты быстрее поймут, что нужно поправить.
Но баг-трекере есть свои нюансы: в зависимости от степени критичности ошибки они могут двигать другие задачи и внезапно становиться важнее всех остальных.
Иногда в компаниях для отработки багов используют тот же таск-трекер, что и для обычных задач, но хорошим тоном считается завести отдельный баг-трекер и собирать туда только ошибки.

Почему программисты не любят таск-трекеры
На самом деле здесь всё зависит от продакт-менеджера.
Если продакт адекватный, следит за нагрузкой команды и грамотно распределяет задачи среди участников, то таск-трекер воспринимается просто как рабочий инструмент.
А если продакт неопытный и каждую неделю наваливает задач выше головы, а потом ещё меняет их в течение дня, то тут таск-трекер — это инструмент пыток, а не повышения продуктивности. Ещё вариант — использовать все фишки таск-трекера, даже если они не нужны. Именно из-за таких ситуаций в ИТ ходят шутки про Jira и другие трекеры:

А можно как-то без всего этого?
Если вы пишете программу или сервис один — то можно: вы сами решаете, что делать сейчас, а что потом. Если вас двое-трое, то тоже всё можно решить в чатиках и при личном общении.
Но когда команда вырастает больше пяти человек, а у продукта появляются первые пользователи, лучше пользоваться трекером — с ним меньше вероятность пропустить важную задачу.
В больших компаниях трекер — обязательная часть процесса, потому что компания не умеет работать с людьми, только с процессами. Если что-то не зафиксировано, не описано и не согласовано, в компании этого нет. Придётся терпеть.
Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Дебажить, апрув, таска: мини-словарь сленга и профессиональной лексики программистов

Как часто от знакомых айтишников вы слышали загадочные термины, например, пушить или деплоить? Скорее всего, очень часто. Если вы только учитесь программированию или устроились на первую работу девелопером, то некоторые термины из IT-сферы могут оказаться незнакомыми. Мы создали мини-словарь сленга и профессиональной лексики: зная айтишные термины, новичкам будет проще освоиться на первой работе. В словарь постарались включить актуальную лексику айтишников (чаще всего это англицизмы), которой сегодня пользуются в IT-компаниях, но не брали такие очевидные слова, как «джун» или «галера», ведь сегодня эти термины стали широко известными. Ассайнить (от англ. assign — поручать) — назначать задачу на человека в качестве исполнителя. Пример употребления:
Аттачить (от англ. attach — прикрепить, загрузить) — используется в том же смысле, что и в английском языке. Например, можно отправлять письмо с прикрепленным файлом. Пример употребления: «Аттачни файл с документацией к письму». Апрув (от англ. approve — одобрять) — одобрение, утверждение или подтверждение чего-либо. Пример употребления: «Я не начну новую таску, так как жду от тебя апрув предыдущей». Бенч (от англ. bench — лавка, скамейка) — режим ожидания. «Программист на бенче» означает, что программист простаивает вхолостую в ожидании нового проекта/задания и, по факту, ничего не делает, но получает зарплату. Пример употребления:
Баг (от англ. bug) — ошибка в программе/коде, из-за которой результаты выполнения программы неправильные. Пример употребления: «Мы можем взять задачу с той багой в этот спринт?». Деплой (от англ. deploy — развертывание) — используется в программировании в своем прямом значении, то есть для обозначения развертывания (переноса) программного обеспечения на сервер или устройство, где оно должно функционировать. Пример употребления: «За свою карьеру я видел довольно много способов деплоя конфигов и уверен, что каждый может узнать об этом что-то новое». Билдить (от англ. to build — строить) — процесс, когда программный код преобразуется из языка программирования в язык машинных кодов. Пример употребления:
Дамп (от англ. dump — бросить, выкинуть) — файл с полной или частичной копией содержимого памяти компьютера или базы данных в момент создания данного файла. Очень часто дампы используются с целью создания и поддержания в актуальном состоянии системы бэкапа. Пример употребления: «Как ты создавал дамп: с помощью phpMyAdmin или через консольное окно?». Коммититься (от англ. commit — совершить) — коммит — это, как правило, кусок кода, влитый программистом в рамках решения данной задачи. Коммититься или закомититься — это соответственно добавить часть коммита в код. Пример употребления: «Я там закоммитил правки и запушил в мастер, можно деплоить». Дебажить (от англ. debug — отладка) — отладка кода, т.е. поиск и исправление ошибок в коде. Пример употребления:
Пингануть (от англ. ping — ударяться со стуком) — напоминать кому-либо о чем-либо, давать знать. Пример для употребления: «Пингани меня в конце дня, а то я могу забыть о нашем митинге». Рефакторинг кода (от англ. refactoring) — изменение исходного кода программы с целью упрощения и облегчения его понимания и дальнейшей поддержки. С помощью рефакторинга код становится чище, исправляются ошибки и «узкие места» в коде. Пример употребления: «Надо посмотреть код этого старого приложения и отрефакторить его». Стендап (от англ. stand-up meeting — «митинг на ногах») — по сути, это старая-добрая планерка или совещание. Традиционно стендап занимает 15 минут и проводится ежедневно в начале рабочего дня. Пример употребления:
Сторя (от англ. story — история) — корневая задача с описанием требований для разработки, она содержит в себе подзадачи, назначенные на разработчиков разных должностей. Пример употребления: «У нас по юзер-сторе надо вначале промокод ввести, а потом уже тотал на чекаут показывать». Фича (от англ. feature — характерная черта) — особенность, уникальное свойство. Существует популярное выражение — «Это не баг, а фича». Пример употребления: «Эта фича спасла игру и сделала ее популярной». Таска (от англ. task — задача) — задание или задача, которые ставят перед разработчиком. Пример употребления:
Фиксить или пофиксить (от англ. fix — исправить) — исправлять ошибки. Пример употребления: «Я быстро пофикшу этот баг, но завтра надо будет протестировать код». Как бы вы дополнили наш мини-словарь? Пишите в комментариях слова, которыми ежедневно пользуетесь в работе.