작업 클래스(동시성 런타임)
PPL(병렬 패턴 라이브러리) task
클래스입니다. 개체는 task
동시성 런타임에서 병렬 알고리즘에 의해 생성된 다른 작업 및 병렬 작업과 비동기적으로 동시에 실행할 수 있는 작업을 나타냅니다. 이러한 작업이 정상적으로 완료되면 _ResultType
형식의 결과가 생성됩니다. task<void>
형식의 작업에서는 결과가 생성되지 않습니다. 작업은 다른 작업과 관계없이 대기 및 취소할 수 있으며 연속() 및 join( then
when_all
) 및 choice( when_any
) 패턴을 사용하여 다른 작업으로 구성할 수도 있습니다. 작업 개체가 새 변수에 할당되면 동작은 해당 동작입니다 std::shared_ptr
. 즉, 두 개체 모두 동일한 기본 작업을 나타냅니다.
구문
template <>
class task<void>;
template<typename _ResultType>
class task;
매개 변수
_ResultType
태스크에서 생성하는 결과의 형식입니다.
멤버
공용 Typedefs
속성 | 설명 |
---|---|
result_type |
이 클래스의 개체가 생성하는 결과의 형식입니다. |
공용 생성자
속성 | 설명 |
---|---|
작업 | 오버로드됨. task 개체를 생성합니다. |
공용 메서드
이름 | 설명 |
---|---|
get | 오버로드됨. 이 작업으로 생성된 결과를 반환합니다. 작업이 종료 상태가 아닐 경우 get 에 대한 호출은 작업이 끝날 때까지 대기합니다. 이 메서드는 result_type 의 void 을 사용하는 작업에서 호출될 때는 값을 반환하지 않습니다. |
is_apartment_aware | 작업이 Windows 런타임 IAsyncInfo 인터페이스의 래핑을 해제하는지 여부 또는 그러한 작업의 하위 작업인지 여부를 확인합니다. |
is_done | 작업 완료 여부를 확인합니다. |
스케줄러 | 이 작업에 대해 스케줄러를 반환합니다. |
then | 오버로드됨. 이 작업에 연속 작업을 추가합니다. |
wait | 이 작업이 종료 상태에 도달할 때까지 기다립니다. wait 은 작업 종속성을 모두 만족하며 백그라운드 작업자에 의해 이미 선택되지 않은 경우 작업을 인라인 실행할 수 있습니다. |
Public 연산자
속성 | 설명 |
---|---|
operator!= | 오버로드됨. 두 task 개체가 서로 다른 내부 작업을 나타내는지 여부를 확인합니다. |
operator= | 오버로드됨. 하나의 task 개체 콘텐츠를 다른 개체 콘텐츠로 바꿉니다. |
연산자== | 오버로드됨. 두 task 개체가 동일한 내부 작업을 나타내는지 여부를 확인합니다. |
설명
자세한 내용은 작업 병렬 처리를 참조하세요.
상속 계층 구조
task
요구 사항
헤더: ppltasks.h
네임스페이스: 동시성
get
이 작업으로 생성된 결과를 반환합니다. 작업이 종료 상태가 아닐 경우 get
에 대한 호출은 작업이 끝날 때까지 대기합니다. 이 메서드는 result_type
의 void
을 사용하는 작업에서 호출될 때는 값을 반환하지 않습니다.
_ResultType get() const;
void get() const;
Return Value
작업의 결과입니다.
설명
작업이 취소되면 호출이 get
task_canceled 예외를 throw합니다. 작업에서 다른 예외가 발생하거나 예외가 선행 작업에서 전파된 경우 get
에 대한 호출은 해당 예외를 throw합니다.
Important
UWP(유니버설 Windows 플랫폼) 앱에서는 사용자 인터페이스 스레드에서 실행되는 코드에서 동시성::task::wait 또는 (호출)를 호출get
하지 않습니다. wait
get
그렇지 않으면 이러한 메서드가 현재 스레드를 차단하고 앱이 응답하지 않게 될 수 있으므로 런타임에서 동시성::invalid_operation throw합니다. 그러나 결과를 즉시 사용할 수 있으므로 메서드를 호출 get
하여 작업 기반 연속 작업에서 선행 작업의 결과를 받을 수 있습니다.
is_apartment_aware
작업이 Windows 런타임 IAsyncInfo
인터페이스의 래핑을 해제하는지 여부 또는 그러한 작업의 하위 작업인지 여부를 확인합니다.
bool is_apartment_aware() const;
Return Value
true
태스크가 인터페이스를 IAsyncInfo
래프 해제하거나 이러한 작업 false
에서 내림차순이면 그렇지 않습니다.
task::is_done 메서드(동시성 런타임)
작업 완료 여부를 확인합니다.
bool is_done() const;
Return Value
작업이 완료되면 True이고, 그렇지 않으면 false입니다.
설명
작업이 완료되거나 취소되면(사용자 예외 포함 또는 제외) 함수는 true를 반환합니다.
operator!=
두 task
개체가 서로 다른 내부 작업을 나타내는지 여부를 확인합니다.
bool operator!= (const task<_ResultType>& _Rhs) const;
bool operator!= (const task<void>& _Rhs) const;
매개 변수
_Rhs
비교할 작업입니다.
Return Value
true
개체가 다른 기본 작업을 참조하면 이고 false
, 그렇지 않으면 입니다.
operator=
하나의 task
개체 콘텐츠를 다른 개체 콘텐츠로 바꿉니다.
task& operator= (const task& _Other);
task& operator= (task&& _Other);
매개 변수
_Other
원본 task
개체입니다.
Return Value
설명
task
가 스마트 포인터와 같이 작동할 경우, 복사 할당 후 이 task
개체는 _Other
와 동일한 실제 작업을 나타냅니다.
연산자==
두 task
개체가 동일한 내부 작업을 나타내는지 여부를 확인합니다.
bool operator== (const task<_ResultType>& _Rhs) const;
bool operator== (const task<void>& _Rhs) const;
매개 변수
_Rhs
비교할 작업입니다.
Return Value
true
개체가 동일한 기본 작업을 참조하면 이고 false
, 그렇지 않으면 입니다.
task::scheduler 메서드(동시성 런타임)
이 작업에 대해 스케줄러를 반환합니다.
scheduler_ptr scheduler() const;
Return Value
스케줄러에 대한 포인터
task
task
개체를 생성합니다.
task();
template<typename T>
__declspec(
noinline) explicit task(T _Param);
template<typename T>
__declspec(
noinline) explicit task(T _Param, const task_options& _TaskOptions);
task(
const task& _Other);
task(
task&& _Other);
매개 변수
T
작업이 생성되는 매개 변수 형식입니다.
_Param
작업이 생성되는 매개 변수입니다. Windows 런타임 앱에서 작업을 사용하는 경우 람다, 함수 개체, task_completion_event<result_type>
개체 또는 Windows::Foundation::IAsyncInfo일 수 있습니다. 람다 또는 함수 개체는 X가 형식의 변수이거나 Windows 런타임 앱의 Windows::Foundation::IAsyncInfo일 수 있는 형식result_type
task<result_type>
과 같std::function<X(void)>
아야 합니다.
_TaskOptions
작업 옵션에는 취소 토큰, 스케줄러 등이 포함됩니다.
_Other
원본 task
개체입니다.
설명
task
에 대한 기본 생성자는 컨테이너 내에서 사용할 수 있는 작업을 허용하기 위해서만 존재합니다. 유효한 작업을 할당할 때까지 기본 생성 작업을 사용할 수 없습니다. 기본 생성 태스크에서 호출될 때 invalid_argument 예외를 throw하거나 then
같은 get
wait
메서드를 throw합니다.
task_completion_event
에서 만든 작업은 작업 완료 이벤트가 설정되면 완료됩니다(연속 실행되도록 예약되어 있음).
취소 토큰을 사용하는 생성자의 버전은 이 토큰을 가져온 cancellation_token_source
를 사용하여 취소할 수 있는 작업을 만듭니다. 취소 토큰 없이 만든 작업은 취소할 수 없습니다.
Windows::Foundation::IAsyncInfo
인터페이스에서 생성되었거나 IAsyncInfo
인터페이스를 반환하는 람다에서 생성된 작업은 포함된 Windows 런타임 비동기 작업 또는 동작이 완료될 때 종료 상태에 도달합니다. 마찬가지로 내부 태스크가 람다를 반환 task<result_type>
할 때가 아니라 터미널 상태에 도달할 때 터미널 상태에 도달하는 람다에서 만든 태스크입니다.
task
는 스마트 포인터처럼 작동하고 값으로 안전하게 전달됩니다. 또한 잠글 필요 없이 여러 스레드에서 액세스할 수 있습니다.
Windows::Foundation::IAsyncInfo 인터페이스 또는 이러한 인터페이스를 반환하는 람다를 사용하는 생성자 오버로드는 Windows 런타임 앱에서만 사용할 수 있습니다.
자세한 내용은 작업 병렬 처리를 참조하세요.
then
이 작업에 연속 작업을 추가합니다.
template<typename _Function>
__declspec(
noinline) auto then(const _Function& _Func) const -> typename details::_ContinuationTypeTraits<_Function,
_ResultType>::_TaskOfType;
template<typename _Function>
__declspec(
noinline) auto then(const _Function& _Func,
const task_options& _TaskOptions) const -> typename details::_ContinuationTypeTraits<_Function,
_ResultType>::_TaskOfType;
template<typename _Function>
__declspec(
noinline) auto then(const _Function& _Func,
cancellation_token _CancellationToken,
task_continuation_context _ContinuationContext) const -> typename details::_ContinuationTypeTraits<_Function,
_ResultType>::_TaskOfType;
template<typename _Function>
__declspec(
noinline) auto then(const _Function& _Func,
const task_options& _TaskOptions = task_options()) const -> typename details::_ContinuationTypeTraits<_Function,
void>::_TaskOfType;
template<typename _Function>
__declspec(
noinline) auto then(const _Function& _Func,
cancellation_token _CancellationToken,
task_continuation_context _ContinuationContext) const -> typename details::_ContinuationTypeTraits<_Function,
void>::_TaskOfType;
매개 변수
_기능
이 작업으로 호출될 함수 개체의 형식입니다.
_Func
이 작업이 완료될 때 실행되는 연속 함수입니다. 이 연속 함수는 result_type
또는 task<result_type>
을 입력 변수로 사용해야 하며, 여기서 result_type
은 이 작업에서 생성하는 결과의 형식입니다.
_TaskOptions
작업 옵션에는 취소 토큰, 스케줄러 및 연속 컨텍스트가 포함됩니다. 기본적으로 앞의 세 가지 옵션은 선행 작업에서 상속됩니다.
_CancellationToken
연속 작업에 연결할 취소 토큰입니다. 취소 토큰 없이 만든 연속 작업은 선행 작업의 토큰을 상속합니다.
_ContinuationContext
연속이 실행되어야 하는 위치를 지정하는 변수입니다. 이 변수는 UWP 앱에서 사용할 때만 유용합니다. 자세한 내용은 task_continuation_context 참조 하세요.
Return Value
새로 만든 연속 작업입니다. 반환된 작업의 결과 형식은 _Func
가 반환하는 것에 따라 결정됩니다.
설명
Windows::Foundation::IAsyncInfo 인터페이스를 반환하는 람다 또는 펀터를 사용하는 오버로드는 then
Windows 런타임 앱에서만 사용할 수 있습니다.
작업 연속 작업을 사용하여 비동기 작업을 작성하는 방법에 대한 자세한 내용은 작업 병렬 처리를 참조하세요.
wait
이 작업이 종료 상태에 도달할 때까지 기다립니다. wait
은 작업 종속성을 모두 만족하며 백그라운드 작업자에 의해 이미 선택되지 않은 경우 작업을 인라인 실행할 수 있습니다.
task_status wait() const;
Return Value
task_status
또는 completed
가 될 수 있는 canceled
값입니다. 작업 실행 중에 예외가 발생하거나 예외가 선행 작업에서 전파된 경우 wait
은 해당 예외를 throw합니다.
설명
Important
UWP(유니버설 Windows 플랫폼) 앱에서는 사용자 인터페이스 스레드에서 실행되는 코드를 호출 wait
하지 마세요. 호출하는 경우 이 메서드가 현재 스레드를 차단하고 앱이 응답하지 않게 만들 수 있기 때문에 런타임에서 concurrency::invalid_operation 을 throw합니다. 그러나 concurrency::task::get 메서드를 호출하여 작업 기반 연속에서 선행 작업의 결과를 받을 수 있습니다.