Функция async
Представляет асинхронный поставщик.
template<class Fn, class... ArgTypes>
future<typename result_of<Fn(ArgTypes...)>::type>;
async(Fn&& fn, ArgTypes&&... args);
template<class Fn, class... ArgTypes>
future<typename result_of<Fn(ArgTypes...)>::type>;
async(launch policy, Fn&& fn, ArgTypes&&... args);
Параметры
- policy
Значение ЗАПУСТИТЬ.
Заметки
Определения форм:
dfn |
Результат вызова decay_copy(forward<Fn>(fn)). |
dargs |
Результаты вызова decay_copy(forward<ArgsTypes>(args…)). |
Ty |
Тип result_of<Fn(ArgTypes…)>::type. |
Первая шаблонная функция возвращает async(launch::any, fn, args…).
Вторая функция возвращает объект future<Ty>асинхронное состояние. которого содержит результат вместе с значениями dfn и dargs и объектом потока для управления отдельный поток выполнения.
Если decay<Fn>::type не будет тип, отличный от запуска, вторая функция не участвует в разрешении перегруженной.
Если policylaunch::any, функция может выбрать launch::async или launch::deferred. В этой реализации, функция использует launch::async.
Если policylaunch::async, функция создает поток, которому INVOKE(dfn, dargs..., Ty). Функция возвращает после того, как она создает поток без ожидания результатов. Если система не может запустить новый поток, функция создает system_error, содержащий код ошибки resource_unavailable_try_again.
Если policylaunch::deferred, функция помечает связанным асинхронное состояние хранения отложенное действуйте и возвращает. Первый вызов любой не синхронизированной функции, ожидает связанных асинхронное состояние, чтобы быть готова фактически отложенная вызывает функцию с вычисления INVOKE(dfn, dargs..., Ty).
Во всех случаях, связанное асинхронное состояние объекта future не задано для подготовки до тех пор, пока вычисление INVOKE(dfn, dargs…, Ty) не завершится, или путем создания исключения или путем возвращения в обычном режиме. Результат связанного асинхронного состояния исключение, если оно было создано, или любое значение, возвращаемое вычислением.
Примечание
Для future— либо последнее shared_future— это вложенное в задачу запущенной с std::async, блоки деструктора, если задача не завершена; то есть, если этот поток блокируется, пока не .get() или .wait() и задачи по-прежнему работают.Если future предоставленное std::async остается локальной областью, другой код, использующий ее следует помнить, что его деструктор может блокировать для общего состояния станет меняется.
Функция псевдодомен INVOKE определена в <functional>.
Требования
Заголовок: future
Пространство имен: std