Namespaces
Variants

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

From cppreference.net

template < class F >
future < /* see below */ > then ( F && func ) const ;

연속 함수 func * this 에 연결합니다. * this 가 연결된 공유 상태를 가지고 있지 않은 경우(즉, valid ( ) == false 인 경우)의 동작은 정의되지 않습니다.

반환될 future 객체와 연관된 공유 상태를 생성하고, fd 의 복사본을 DECAY_COPY ( std:: forward < F > ( func ) ) 에 의해 생성된 것처럼 구성합니다. 이는 then 을 호출하는 스레드에서 평가되며, 여기서 DECAY_COPY 는 다음과 같이 정의됩니다.

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

이 객체와 현재 연관된 공유 상태가 준비되면, 연속 실행 INVOKE ( std :: move ( fd ) , * this ) 가 지정되지 않은 실행 스레드에서 호출됩니다. 여기서 INVOKE Callable 에 정의된 연산입니다. 해당 표현식이 유효하지 않을 경우 동작은 정의되지 않습니다.

연속(continuation)에서 반환된 모든 값은 반환된 future 객체의 공유 상태(shared state)에 결과로 저장됩니다. 연속 실행에서 전파된 모든 예외는 반환된 future 객체의 공유 상태에 예외적 결과(exceptional result)로 저장됩니다.

연속(continuation)의 반환 타입(즉, U )를 std:: result_of_t < std:: decay_t < F > ( const std:: experimental :: shared_future < T > & ) > )라고 하자. 만약 U 가 어떤 타입 T2 에 대해 std:: experimental :: future < T2 > 라면, then 의 반환 타입은 std:: experimental :: future < T2 > 이고, 그렇지 않으면 std:: experimental :: future < U > 이다. 이를 암묵적 언래핑(implicit unwrapping) 이라고 한다.

암시적 언래핑이 발생하고 연속 작업이 유효하지 않은 future 를 반환하는 경우, 공유 상태는 std::future_error 타입의 예외와 함께 std::future_errc::broken_promise 오류 조건으로 준비 상태가 됩니다.

이 함수가 반환된 후, valid ( ) true 입니다.

매개변수

func - 연결될 연속(continuation)

반환값

이 객체에 의해 생성된 공유 상태와 연관된 std::experimental::future 객체. 반환된 객체에 대해 valid ( ) == true 입니다.

예제