async – funkce
Představuje asynchronního poskytovatele.
template<class Fn, class... ArgTypes>
future<typename result_of<Fn(ArgTypes...)>::type>;
async(Fn&& fn, ArgTypes&&... args);
template<class Fn, class... ArgTypes>
future<typename result_of<Fn(ArgTypes...)>::type>;
async(launch policy, Fn&& fn, ArgTypes&&... args);
Parametry
- policy
Hodnota spuštění.
Poznámky
Definice zkratek:
dfn |
Výsledek volání funkce decay_copy(forward<Fn>(fn)). |
dargs |
Výsledky volání funkce decay_copy(forward<ArgsTypes>(args…)). |
Ty |
Typ result_of<Fn(ArgTypes…)>::type. |
První šablona funkce vrátí funkci async(launch::any, fn, args…).
Druhá funkce vrátí objekt future<Ty>, jehož přidružený asynchronní stav uchovává výsledek spolu s hodnotami dfn a dargs a objekt vlákna pro správu samostatného vlákna provádění.
Není-li typ decay<Fn>::type jiný typ než spuštění, druhá funkce se nebude účastnit rozlišení přetížení.
Pokud má parametr policy hodnotu launch::any, může tato funkce vybrat funkci launch::async nebo launch::deferred.V této implementaci funkce používá funkci launch::async.
Pokud má parametr policy hodnotu launch::async, vytvoří tato funkce vlákno, jehož výsledkem je funkce INVOKE(dfn, dargs..., Ty).Funkce se vrátí po vytvoření vlákna bez čekání na výsledky.Pokud systém nemůže spustit nové vlákno, funkce vyvolá chybu system_error, která má kód chyby resource_unavailable_try_again.
Pokud má parametr policy hodnotu launch::deferred, označí tato funkce přidružený asynchronní stav jako držení odložené funkce a vrátí provádění.První volání nečasové funkce, která čeká, až bude související asynchronní stav připraven, v důsledku volá odloženou funkci pomocí vyhodnocení funkce INVOKE(dfn, dargs..., Ty).
Ve všech případech přidružený asynchronní stav objektu future není nastaven na připraven dokud vyhodnocení funkce INVOKE(dfn, dargs…, Ty) neskončí vyvoláním výjimky nebo normálním vrácením.Výsledek přidruženého asynchronního stavu je výjimka, pokud byla nějaká vyvolána nebo libovolná hodnota, která je vrácena vyhodnocením.
[!POZNÁMKA]
Pro objekt future, nebo poslední objekt shared_future, který je připojen k úloze spuštěné pomocí funkce std::async, je destruktor blokován, pokud úkol nebyl dokončen, tedy je blokován, pokud toto vlákno dosud nevolalo funkci .get() nebo .wait() a úkol je stále spuštěn.Pokud je objekt future získaný z volání funkce std::async přesunut mimo místní rozsah, jiný kód, který jej používá, musí být vědom, že jeho destruktor může být blokován, než sdílený stav změní na stav připraven.
Pseudo funkce INVOKE je definována v hlavičkovém souboru <functional>.
Požadavky
Záhlaví: future
Obor názvů: std