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.