2016-09-05 7 views

ответ

0

хотя task::is_done правильный способ проверить, если задача выполнена, я предлагаю не использовать его. если is_done возвращает false, к тому времени, когда вы начали действовать по этому факту, задача может быть уже выполнена. эта функция очень полезна, не говоря уже о том, что эта функция, вероятно, требует некоторой синхронизации, которая может замедлить работу программы.

вместо этого, просто цепь продолжение или использовать co_await. обработайте законченную задачу там.

+0

Я использую асинхронный API (XboxLive) в синхронном коде (я ничего не могу с этим поделать). Это часть функции, которая проверяет, была ли выполнена какая-либо предыдущая операция, прежде чем запускать новую. Поскольку у меня в основном нет знаний о concurrecy RT (я читаю об этом, поскольку я иду), моим первым решением было установить переменную перед запуском асинхронной операции и установкой переменной на false в .then. – Zingam

+0

@ Zingam плохая идея. эти задачи, а не спрашивать их, если они сделаны. –

+0

Как я мог это сделать? Я реализую интерфейс (виртуальные функции) getInfoAsync(), isAsyncComplete(), getRangeAsync(). Async в этом случае означает, что эти задачи выполняются в отдельном потоке. Они вызывается триггерной системой. Эти интерфейсы уже реализованы для нескольких разных платформ и разных API. Во всяком случае, я буду помнить ваш совет. – Zingam