Namespaces
Variants

std::experimental::shared_future<T>:: then

From cppreference.net

template < class F >
future < /* siehe unten */ > then ( F && func ) const ;

Hängen Sie die Fortsetzung func an * this . Das Verhalten ist undefiniert, wenn * this keinen zugehörigen gemeinsamen Zustand hat (d.h. valid ( ) == false ).

Erzeugt einen gemeinsam genutzten Zustand, der mit dem zurückzugebenden future -Objekt assoziiert ist, sowie eine Kopie fd von func , die so konstruiert wird, als ob DECAY_COPY ( std:: forward < F > ( func ) ) im Thread ausgewertet würde, der then aufruft, wobei DECAY_COPY definiert ist als

template<class T>
std::decay_t<T> DECAY_COPY(T&& v)
{
    return std::forward<T>(v);
}

Wenn der gemeinsam genutzte Zustand, der derzeit mit * this assoziiert ist, bereit ist, wird die Fortsetzung INVOKE ( std :: move ( fd ) , * this ) in einem nicht spezifizierten Ausführungsthread aufgerufen, wobei INVOKE die in Callable definierte Operation ist. Wenn dieser Ausdruck ungültig ist, ist das Verhalten undefiniert.

Jeder von der Fortsetzung zurückgegebene Wert wird als Ergebnis im gemeinsamen Zustand des zurückgegebenen future -Objekts gespeichert. Jede Ausnahme, die von der Ausführung der Fortsetzung propagiert wird, wird als außergewöhnliches Ergebnis im gemeinsamen Zustand des zurückgegebenen future -Objekts gespeichert.

Sei U der Rückgabetyp der Fortsetzung (d.h. std:: result_of_t < std:: decay_t < F > ( const std:: experimental :: shared_future < T > & ) > ). Falls U gleich std:: experimental :: future < T2 > für einen Typ T2 ist, dann ist der Rückgabetyp von then gleich std:: experimental :: future < T2 > , andernfalls ist er std:: experimental :: future < U > . Dies wird als implizites Entpacken bezeichnet.

Wenn implizites Entpacken stattfindet und die Fortsetzung einen ungültigen future zurückgibt, wird der gemeinsame Zustand mit einer Ausnahme vom Typ std::future_error bereitgestellt, mit einer Fehlerbedingung von std::future_errc::broken_promise .

Nachdem diese Funktion zurückkehrt, valid ( ) ist true .

Parameter

func - eine anzuhängende Fortsetzung

Rückgabewert

Ein std::experimental::future Objekt, das mit dem durch dieses Objekt erzeugten gemeinsamen Zustand verknüpft ist. valid ( ) == true für das zurückgegebene Objekt.

Beispiel