std :: función asíncrona que se ejecuta en serie

Cuando uso std :: async con launch :: async en un bucle for, mi código se ejecuta en serie en el mismo hilo, como si cada llamada asincrónica esperara a la anterior antes de iniciarse. En las notas para referencias std :: async (std :: async), esto es posible si std :: future no está vinculado a una referencia, pero ese no es el caso con mi código. ¿Alguien puede entender por qué se ejecuta en serie?

Aquí está mi fragmento 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);
     }
}

El futuro se está almacenando en un futuro compartido porque varios subprocesos podrían estar esperando en el mismo futuro.

También estoy usando GCC 6.2.1 para compilarlo.

Respuestas a la pregunta(3)

Su respuesta a la pregunta