std :: async Funktion läuft seriell

Wenn Sie std :: async mit launch :: async in einer for-Schleife verwenden, wird mein Code seriell im selben Thread ausgeführt, als würde jeder asynchrone Aufruf vor dem Start auf den vorherigen warten. In den Notizen für std :: async Referenzen std :: async), dies ist möglich, wenn die std :: future nicht an einen Verweis gebunden ist, dies bei meinem Code jedoch nicht der Fall ist. Kann jemand herausfinden, warum es seriell läuft?

Hier ist mein Code-Snippet:

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

Die Zukunft wird in einer gemeinsamen Zukunft gespeichert, da möglicherweise mehrere Threads auf dieselbe Zukunft warten.

Ich verwende auch GCC 6.2.1, um es zu kompilieren.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage