функция std :: async, запущенная последовательно

При использовании std :: async с launch :: async в цикле for мой код выполняется последовательно в одном и том же потоке, как если бы каждый асинхронный вызов ожидал предыдущего перед запуском. В примечаниях к ссылкам std :: async (станд :: асинхронной), это возможно, если std :: future не привязан к ссылке, но это не относится к моему коду. Кто-нибудь может понять, почему он работает серийно?

Вот мой фрагмент кода:

class __DownloadItem__ { //DownloadItem is just a "typedef shared_ptr<__DownloadItem__> DownloadItem"
    std::string buffer;
    time_t last_access;
 std::shared_future<std::string> future;
}

for(uint64_t start: chunksToDownload){
        DownloadItem cache = std::make_shared<__DownloadItem__>();
        cache->last_access = time(NULL);
        cache->future =
                std::async(std::launch::async, &FileIO::download, this, api,cache, cacheName, start, start + BLOCK_DOWNLOAD_SIZE - 1);
     }
}

Будущее хранится в общем будущем, потому что несколько потоков могут ожидать одного и того же будущего.

Я также использую GCC 6.2.1 для его компиляции.

Ответы на вопрос(3)

Ваш ответ на вопрос