Função std :: async em execução em série

Ao usar std :: async com launch :: async em um loop for, meu código é executado em série no mesmo thread, como se cada chamada assíncrona esperasse pelo anterior antes de iniciar. Nas notas para referências std :: async (std :: async), isso é possível se o std :: future não estiver vinculado a uma referência, mas esse não é o caso do meu código. Alguém pode descobrir por que está sendo executado em série?

Aqui está o meu trecho de código:

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);
     }
}

O futuro está sendo armazenado em um futuro compartilhado porque vários threads podem estar esperando no mesmo futuro.

Também estou usando o GCC 6.2.1 para compilá-lo.

questionAnswers(3)

yourAnswerToTheQuestion