작업 클래스(동시성 런타임)task Class (Concurrency Runtime)

PPL(병렬 패턴 라이브러리) task 클래스입니다.The Parallel Patterns Library (PPL) task class. task개체는 동시성 런타임의 병렬 알고리즘에 의해 생성 된 다른 작업 및 병렬 작업과 동시에 비동기적으로 실행 될 수 있는 작업을 나타냅니다.A task object represents work that can be executed asynchronously and concurrently with other tasks and parallel work produced by parallel algorithms in the Concurrency Runtime. 이러한 작업이 정상적으로 완료되면 _ResultType 형식의 결과가 생성됩니다.It produces a result of type _ResultType on successful completion. task<void> 형식의 작업에서는 결과가 생성되지 않습니다.Tasks of type task<void> produce no result. 작업은 다른 작업과 관계없이 대기 및 취소할 수 있으며A task can be waited upon and canceled independently of other tasks. 연속 ( then ), join ( when_all ) 및 choice () 패턴을 사용 하 여 다른 작업으로 구성 될 수도 있습니다 when_any .It can also be composed with other tasks using continuations( then), and join( when_all) and choice( when_any) patterns. 작업 개체가 새 변수에 할당 되는 경우의 동작은입니다 std::shared_ptr . 즉, 두 개체가 모두 동일한 기본 작업을 나타냅니다.When a task object is assigned to a new variable, the behavior is that of std::shared_ptr; in other words, both objects represent the same underlying task.

구문Syntax

template <>
class task<void>;

template<typename _ResultType>
class task;

매개 변수Parameters

_ResultType_ResultType
태스크에서 생성 하는 결과의 형식입니다.The type of the result that the task produces.

멤버Members

공용 TypedefsPublic Typedefs

NameName 설명Description
result_type 이 클래스의 개체가 생성하는 결과의 형식입니다.The type of the result an object of this class produces.

Public 생성자Public Constructors

NameName 설명Description
임무task 오버로드되었습니다.Overloaded. task 개체를 생성합니다.Constructs a task object.

Public 메서드Public Methods

이름Name 설명Description
getget 오버로드되었습니다.Overloaded. 이 작업으로 생성된 결과를 반환합니다.Returns the result this task produced. 작업이 종료 상태가 아닐 경우 get에 대한 호출은 작업이 끝날 때까지 대기합니다.If the task is not in a terminal state, a call to get will wait for the task to finish. 이 메서드는가 인 작업에 대해 호출 될 때 값을 반환 하지 않습니다 result_type void .This method does not return a value when called on a task with a result_type of void.
is_apartment_awareis_apartment_aware 작업이 Windows 런타임 IAsyncInfo 인터페이스의 래핑을 해제하는지 여부 또는 그러한 작업의 하위 작업인지 여부를 확인합니다.Determines whether the task unwraps a Windows Runtime IAsyncInfo interface or is descended from such a task.
is_doneis_done 작업 완료 여부를 확인합니다.Determines if the task is completed.
일정표scheduler 이 작업에 대해 스케줄러를 반환합니다.Returns the scheduler for this task
다음then 오버로드되었습니다.Overloaded. 이 작업에 연속 작업을 추가합니다.Adds a continuation task to this task.
대기한wait 이 작업이 종료 상태에 도달할 때까지 기다립니다.Waits for this task to reach a terminal state. wait은 작업 종속성을 모두 만족하며 백그라운드 작업자에 의해 이미 선택되지 않은 경우 작업을 인라인 실행할 수 있습니다.It is possible for wait to execute the task inline, if all of the tasks dependencies are satisfied, and it has not already been picked up for execution by a background worker.

Public 연산자Public Operators

NameName 설명Description
연산자! =operator!= 오버로드되었습니다.Overloaded. task 개체가 서로 다른 내부 작업을 나타내는지 여부를 확인합니다.Determines whether two task objects represent different internal tasks.
연산자 =operator= 오버로드되었습니다.Overloaded. 하나의 task 개체 콘텐츠를 다른 개체 콘텐츠로 바꿉니다.Replaces the contents of one task object with another.
연산자 = =operator== 오버로드되었습니다.Overloaded. task 개체가 동일한 내부 작업을 나타내는지 여부를 확인합니다.Determines whether two task objects represent the same internal task.

설명Remarks

자세한 내용은 작업 병렬 처리를 참조 하세요.For more information, see Task Parallelism.

상속 계층 구조Inheritance Hierarchy

task

요구 사항Requirements

헤더: ppltasks.hHeader: ppltasks.h

네임 스페이스: 동시성Namespace: concurrency

가져오기get

이 작업으로 생성된 결과를 반환합니다.Returns the result this task produced. 작업이 종료 상태가 아닐 경우 get에 대한 호출은 작업이 끝날 때까지 대기합니다.If the task is not in a terminal state, a call to get will wait for the task to finish. 이 메서드는가 인 작업에 대해 호출 될 때 값을 반환 하지 않습니다 result_type void .This method does not return a value when called on a task with a result_type of void.

_ResultType get() const;

void get() const;

Return ValueReturn Value

작업의 결과입니다.The result of the task.

설명Remarks

작업이 취소 되 면를 호출 하면 get task_canceled 예외가 throw 됩니다.If the task is canceled, a call to get will throw a task_canceled exception. 작업에서 다른 예외가 발생하거나 예외가 선행 작업에서 전파된 경우 get에 대한 호출은 해당 예외를 throw합니다.If the task encountered an different exception or an exception was propagated to it from an antecedent task, a call to get will throw that exception.

중요

UWP (유니버설 Windows 플랫폼) 앱에서 concurrency::task::wait get wait get 사용자 인터페이스 스레드에서 실행 되는 코드에서 concurrency:: task:: wait 또는 (호출)를 호출 하지 마세요.In a Universal Windows Platform (UWP) app, do not call concurrency::task::wait or get ( wait calls get) in code that runs on the user-interface thread. 그렇지 않으면이 메서드는 현재 스레드를 차단 하 고 앱이 응답 하지 않을 수 있으므로 concurrency:: invalid_operation 을 throw 합니다.Otherwise, the runtime throws concurrency::invalid_operation because these methods block the current thread and can cause the app to become unresponsive. 그러나 get 결과를 즉시 사용할 수 있기 때문에 메서드를 호출 하 여 작업 기반 연속에서 선행 작업의 결과를 받을 수 있습니다.However, you can call the get method to receive the result of the antecedent task in a task-based continuation because the result is immediately available.

is_apartment_awareis_apartment_aware

작업이 Windows 런타임 IAsyncInfo 인터페이스의 래핑을 해제하는지 여부 또는 그러한 작업의 하위 작업인지 여부를 확인합니다.Determines whether the task unwraps a Windows Runtime IAsyncInfo interface or is descended from such a task.

bool is_apartment_aware() const;

Return ValueReturn Value

true 태스크가 인터페이스를의 래핑을 해제 IAsyncInfo 하거나 그러한 작업의 하위 항목인 경우이 고, false 그렇지 않으면입니다.true if the task unwraps an IAsyncInfo interface or is descended from such a task, false otherwise.

task:: is_done 메서드 (동시성 런타임)task::is_done Method (Concurrency Runtime)

작업 완료 여부를 확인합니다.Determines if the task is completed.

bool is_done() const;

Return ValueReturn Value

태스크가 완료 되었으면 True이 고, 그렇지 않으면 false입니다.True if the task has completed, false otherwise.

설명Remarks

작업을 완료 하거나 취소 하는 경우 (사용자 예외 유무에 관계 없이) 함수는 true를 반환 합니다.The function returns true if the task is completed or canceled (with or without user exception).

연산자! =operator!=

task 개체가 서로 다른 내부 작업을 나타내는지 여부를 확인합니다.Determines whether two task objects represent different internal tasks.

bool operator!= (const task<_ResultType>& _Rhs) const;

bool operator!= (const task<void>& _Rhs) const;

매개 변수Parameters

_Rhs_Rhs
비교할 작업입니다.The task to compare.

Return ValueReturn Value

true 개체가 서로 다른 기본 작업을 참조 하면이 고, false 그렇지 않으면입니다.true if the objects refer to different underlying tasks, and false otherwise.

연산자 =operator=

하나의 task 개체 콘텐츠를 다른 개체 콘텐츠로 바꿉니다.Replaces the contents of one task object with another.

task& operator= (const task& _Other);

task& operator= (task&& _Other);

매개 변수Parameters

_Other_Other
소스 task 개체입니다.The source task object.

Return ValueReturn Value

설명Remarks

task가 스마트 포인터와 같이 작동할 경우, 복사 할당 후 이 task 개체는 _Other와 동일한 실제 작업을 나타냅니다.As task behaves like a smart pointer, after a copy assignment, this task objects represents the same actual task as _Other does.

연산자 = =operator==

task 개체가 동일한 내부 작업을 나타내는지 여부를 확인합니다.Determines whether two task objects represent the same internal task.

bool operator== (const task<_ResultType>& _Rhs) const;

bool operator== (const task<void>& _Rhs) const;

매개 변수Parameters

_Rhs_Rhs
비교할 작업입니다.The task to compare.

Return ValueReturn Value

true 개체가 동일한 기본 작업을 참조 하면이 고, false 그렇지 않으면입니다.true if the objects refer to the same underlying task, and false otherwise.

task:: scheduler 메서드 (동시성 런타임)task::scheduler Method (Concurrency Runtime)

이 작업에 대해 스케줄러를 반환합니다.Returns the scheduler for this task

scheduler_ptr scheduler() const;

Return ValueReturn Value

스케줄러에 대 한 포인터입니다.A pointer to the scheduler

작업task

task 개체를 생성합니다.Constructs a task object.

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);

매개 변수Parameters

TT
작업이 생성되는 매개 변수 형식입니다.The type of the parameter from which the task is to be constructed.

_Param_Param
작업이 생성되는 매개 변수입니다.The parameter from which the task is to be constructed. task_completion_event<result_type>Windows 런타임 앱에서 작업을 사용 하는 경우이는 람다, 함수 개체, 개체 또는 Windows:: Foundation:: IAsyncInfo 일 수 있습니다.This could be a lambda, a function object, a task_completion_event<result_type> object, or a Windows::Foundation::IAsyncInfo if you are using tasks in your Windows Runtime app. 람다 또는 함수 개체는와 동일한 형식 이어야 합니다 std::function<X(void)> . 여기서 X는 result_type , task<result_type> 또는 Windows 런타임 apps의 Windows:: Foundation:: IAsyncInfo 형식의 변수일 수 있습니다.The lambda or function object should be a type equivalent to std::function<X(void)>, where X can be a variable of type result_type, task<result_type>, or a Windows::Foundation::IAsyncInfo in Windows Runtime apps.

_TaskOptions_TaskOptions
작업 옵션에는 취소 토큰, 스케줄러 등이 포함됩니다.The task options include cancellation token, scheduler etc

_Other_Other
소스 task 개체입니다.The source task object.

설명Remarks

task에 대한 기본 생성자는 컨테이너 내에서 사용할 수 있는 작업을 허용하기 위해서만 존재합니다.The default constructor for a task is only present in order to allow tasks to be used within containers. 유효한 작업을 할당할 때까지 기본 생성 작업을 사용할 수 없습니다.A default constructed task cannot be used until you assign a valid task to it. 또는와 같은 메서드는 get wait then 기본 생성 작업에서 호출 될 때 invalid_argument 예외를 throw 합니다.Methods such as get, wait or then will throw an invalid_argument exception when called on a default constructed task.

task_completion_event에서 만든 작업은 작업 완료 이벤트가 설정되면 완료됩니다(연속 실행되도록 예약되어 있음).A task that is created from a task_completion_event will complete (and have its continuations scheduled) when the task completion event is set.

취소 토큰을 사용하는 생성자의 버전은 이 토큰을 가져온 cancellation_token_source를 사용하여 취소할 수 있는 작업을 만듭니다.The version of the constructor that takes a cancellation token creates a task that can be canceled using the cancellation_token_source the token was obtained from. 취소 토큰 없이 만든 작업은 취소할 수 없습니다.Tasks created without a cancellation token are not cancelable.

Windows::Foundation::IAsyncInfo 인터페이스에서 생성되었거나 IAsyncInfo 인터페이스를 반환하는 람다에서 생성된 작업은 포함된 Windows 런타임 비동기 작업 또는 동작이 완료될 때 종료 상태에 도달합니다.Tasks created from a Windows::Foundation::IAsyncInfo interface or a lambda that returns an IAsyncInfo interface reach their terminal state when the enclosed Windows Runtime asynchronous operation or action completes. 마찬가지로을 반환 하는 람다에서 만든 작업은 task<result_type> 람다가 반환 될 때가 아닌 내부 작업이 터미널 상태에 도달 하면 해당 터미널 상태에 도달 합니다.Similarly, tasks created from a lambda that returns a task<result_type> reach their terminal state when the inner task reaches its terminal state, and not when the lambda returns.

task는 스마트 포인터처럼 작동하고 값으로 안전하게 전달됩니다.task behaves like a smart pointer and is safe to pass around by value. 또한 잠글 필요 없이 여러 스레드에서 액세스할 수 있습니다.It can be accessed by multiple threads without the need for locks.

Windows:: Foundation:: IAsyncInfo 인터페이스를 사용 하는 생성자 오버 로드 또는 이러한 인터페이스를 반환 하는 람다는 Windows 런타임 앱 에서만 사용할 수 있습니다.The constructor overloads that take a Windows::Foundation::IAsyncInfo interface or a lambda returning such an interface, are only available to Windows Runtime apps.

자세한 내용은 작업 병렬 처리를 참조 하세요.For more information, see Task Parallelism.

다음then

이 작업에 연속 작업을 추가합니다.Adds a continuation task to this task.

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;

매개 변수Parameters

_Function_Function
이 작업으로 호출될 함수 개체의 형식입니다.The type of the function object that will be invoked by this task.

_Func_Func
이 작업이 완료될 때 실행되는 연속 함수입니다.The continuation function to execute when this task completes. 이 연속 함수는 result_type 또는 task<result_type>을 입력 변수로 사용해야 하며, 여기서 result_type은 이 작업에서 생성하는 결과의 형식입니다.This continuation function must take as input a variable of either result_type or task<result_type>, where result_type is the type of the result this task produces.

_TaskOptions_TaskOptions
작업 옵션에는 취소 토큰, 스케줄러 및 연속 컨텍스트가 포함됩니다.The task options include cancellation token, scheduler and continuation context. 기본적으로 앞의 세 가지 옵션은 선행 작업에서 상속됩니다.By default the former 3 options are inherited from the antecedent task

_CancellationToken_CancellationToken
연속 작업에 연결할 취소 토큰입니다.The cancellation token to associate with the continuation task. 취소 토큰 없이 만든 연속 작업은 선행 작업의 토큰을 상속합니다.A continuation task that is created without a cancellation token will inherit the token of its antecedent task.

_ContinuationContext_ContinuationContext
연속이 실행되어야 하는 위치를 지정하는 변수입니다.A variable that specifies where the continuation should execute. 이 변수는 UWP 앱에서 사용 하는 경우에만 유용 합니다.This variable is only useful when used in a UWP app. 자세한 내용은 task_continuation_context 를 참조 하세요.For more information, see task_continuation_context

Return ValueReturn Value

새로 만든 연속 작업입니다.The newly created continuation task. 반환된 작업의 결과 형식은 _Func가 반환하는 것에 따라 결정됩니다.The result type of the returned task is determined by what _Func returns.

설명Remarks

thenWindows:: Foundation:: IAsyncInfo 인터페이스를 반환 하는 람다 또는 함수를 사용 하는의 오버 로드는 Windows 런타임 앱 에서만 사용할 수 있습니다.The overloads of then that take a lambda or functor that returns a Windows::Foundation::IAsyncInfo interface, are only available to Windows Runtime apps.

작업 연속을 사용 하 여 비동기 작업을 작성 하는 방법에 대 한 자세한 내용은 작업 병렬 처리를 참조 하세요.For more information on how to use task continuations to compose asynchronous work, see Task Parallelism.

대기한wait

이 작업이 종료 상태에 도달할 때까지 기다립니다.Waits for this task to reach a terminal state. wait은 작업 종속성을 모두 만족하며 백그라운드 작업자에 의해 이미 선택되지 않은 경우 작업을 인라인 실행할 수 있습니다.It is possible for wait to execute the task inline, if all of the tasks dependencies are satisfied, and it has not already been picked up for execution by a background worker.

task_status wait() const;

Return ValueReturn Value

task_status 또는 completed가 될 수 있는 canceled 값입니다.A task_status value which could be either completed or canceled. 작업 실행 중에 예외가 발생하거나 예외가 선행 작업에서 전파된 경우 wait은 해당 예외를 throw합니다.If the task encountered an exception during execution, or an exception was propagated to it from an antecedent task, wait will throw that exception.

설명Remarks

중요

UWP (유니버설 Windows 플랫폼) 앱에서 wait 사용자 인터페이스 스레드에서 실행 되는 코드를 호출 하지 마세요.In a Universal Windows Platform (UWP) app, do not call wait in code that runs on the user-interface thread. 호출하는 경우 이 메서드가 현재 스레드를 차단하고 앱이 응답하지 않게 만들 수 있기 때문에 런타임에서 concurrency::invalid_operation 을 throw합니다.Otherwise, the runtime throws concurrency::invalid_operation because this method blocks the current thread and can cause the app to become unresponsive. 그러나 concurrency::task::get 메서드를 호출하여 작업 기반 연속에서 선행 작업의 결과를 받을 수 있습니다.However, you can call the concurrency::task::get method to receive the result of the antecedent task in a task-based continuation.

참고 항목See also

concurrency 네임 스페이스concurrency Namespace