AsyncBase Class

Implements the Windows Runtime asynchronous state machine.

Syntax

template <
    typename TComplete,
    typename TProgress = Details::Nil,
    AsyncResultType resultType = SingleResult
>
class AsyncBase : public AsyncBase<TComplete, Details::Nil, resultType>;

template <typename TComplete, AsyncResultType resultType>
class AsyncBase<TComplete, Details::Nil, resultType> :
    public Microsoft::WRL::Implements<IAsyncInfo>;

Parameters

TComplete
An event handler that is called when an asynchronous operation completes.

TProgress
An event handler that is called when a running asynchronous operation reports the current progress of the operation.

resultType
One of the AsyncResultType enumeration values. By default, SingleResult.

Members

Public Constructors

Name Description
AsyncBase::AsyncBase Initializes an instance of the AsyncBase class.

Public Methods

Name Description
AsyncBase::Cancel Cancels an asynchronous operation.
AsyncBase::Close Closes the asynchronous operation.
AsyncBase::FireCompletion Invokes the completion event handler, or resets the internal progress delegate.
AsyncBase::FireProgress Invokes the current progress event handler.
AsyncBase::get_ErrorCode Retrieves the error code for the current asynchronous operation.
AsyncBase::get_Id Retrieves the handle of the asynchronous operation.
AsyncBase::get_Status Retrieves a value that indicates the status of the asynchronous operation.
AsyncBase::GetOnComplete Copies the address of the current completion event handler to the specified variable.
AsyncBase::GetOnProgress Copies the address of the current progress event handler to the specified variable.
AsyncBase::put_Id Sets the handle of the asynchronous operation.
AsyncBase::PutOnComplete Sets the address of the completion event handler to the specified value.
AsyncBase::PutOnProgress Sets the address of the progress event handler to the specified value.

Protected Methods

Name Description
AsyncBase::CheckValidStateForDelegateCall Tests whether delegate properties can be modified in the current asynchronous state.
AsyncBase::CheckValidStateForResultsCall Tests whether the results of an asynchronous operation can be collected in the current asynchronous state.
AsyncBase::ContinueAsyncOperation Determines whether the asynchronous operation should continue processing or should halt.
AsyncBase::CurrentStatus Retrieves the status of the current asynchronous operation.
AsyncBase::ErrorCode Retrieves the error code for the current asynchronous operation.
AsyncBase::OnCancel When overridden in a derived class, cancels an asynchronous operation.
AsyncBase::OnClose When overridden in a derived class, closes an asynchronous operation.
AsyncBase::OnStart When overridden in a derived class, starts an asynchronous operation.
AsyncBase::Start Starts the asynchronous operation.
AsyncBase::TryTransitionToCompleted Indicates whether the current asynchronous operation has completed.
AsyncBase::TryTransitionToError Indicates whether the specified error code can modify the internal error state.

Inheritance Hierarchy

AsyncBase

AsyncBase

Requirements

Header: async.h

Namespace: Microsoft::WRL

AsyncBase::AsyncBase

Initializes an instance of the AsyncBase class.

AsyncBase();

AsyncBase::Cancel

Cancels an asynchronous operation.

STDMETHOD(
   Cancel
)(void);

Return Value

By default, always returns S_OK.

Remarks

Cancel() is a default implementation of IAsyncInfo::Cancel, and does no actual work. To actually cancel an asynchronous operation, override the OnCancel() pure virtual method.

AsyncBase::CheckValidStateForDelegateCall

Tests whether delegate properties can be modified in the current asynchronous state.

inline HRESULT CheckValidStateForDelegateCall();

Return Value

S_OK if delegate properties can be modified; otherwise, E_ILLEGAL_METHOD_CALL.

AsyncBase::CheckValidStateForResultsCall

Tests whether the results of an asynchronous operation can be collected in the current asynchronous state.

inline HRESULT CheckValidStateForResultsCall();

Return Value

S_OK if results can be collected; otherwise, E_ILLEGAL_METHOD_CALLE_ILLEGAL_METHOD_CALL.

AsyncBase::Close

Closes the asynchronous operation.

STDMETHOD(
   Close
)(void) override;

Return Value

S_OK if the operation closes or is already closed; otherwise, E_ILLEGAL_STATE_CHANGE.

Remarks

Close() is a default implementation of IAsyncInfo::Close, and does no actual work. To actually close an asynchronous operation, override the OnClose() pure virtual method.

AsyncBase::ContinueAsyncOperation

Determines whether the asynchronous operation should continue processing or should halt.

inline bool ContinueAsyncOperation();

Return Value

true if the current state of the asynchronous operation is started, which means the operation should continue. Otherwise, false, which means the operation should halt.

AsyncBase::CurrentStatus

Retrieves the status of the current asynchronous operation.

inline void CurrentStatus(
   Details::AsyncStatusInternal *status
);

Parameters

status
The location where this operation stores the current status.

Remarks

This operation is thread-safe.

AsyncBase::ErrorCode

Retrieves the error code for the current asynchronous operation.

inline void ErrorCode(
   HRESULT *error
);

Parameters

error
The location where this operation stores the current error code.

Remarks

This operation is thread-safe.

AsyncBase::FireCompletion

Invokes the completion event handler, or resets the internal progress delegate.

void FireCompletion(
   void
) override;

virtual void FireCompletion();

Remarks

The first version of FireCompletion() resets the internal progress delegate variable. The second version invokes the completion event handler if the asynchronous operation is complete.

AsyncBase::FireProgress

Invokes the current progress event handler.

void FireProgress(
   const typename ProgressTraits::Arg2Type arg
);

Parameters

arg
The event handler method to invoke.

Remarks

ProgressTraits is derived from ArgTraitsHelper Structure.

AsyncBase::get_ErrorCode

Retrieves the error code for the current asynchronous operation.

STDMETHOD(
   get_ErrorCode
)(HRESULT* errorCode) override;

Parameters

errorCode
The location where the current error code is stored.

Return Value

S_OK if successful; otherwise, E_ILLEGAL_METHOD_CALL if the current asynchronous operation is closed.

AsyncBase::get_Id

Retrieves the handle of the asynchronous operation.

STDMETHOD(
   get_Id
)(unsigned int *id) override;

Parameters

id
The location where the handle is to be stored.

Return Value

S_OK if successful; otherwise, E_ILLEGAL_METHOD_CALL.

Remarks

This method implements IAsyncInfo::get_Id.

AsyncBase::get_Status

Retrieves a value that indicates the status of the asynchronous operation.

STDMETHOD(
   get_Status
)(AsyncStatus *status) override;

Parameters

status
The location where the status is to be stored. For more information, see Windows::Foundation::AsyncStatus enumeration.

Return Value

S_OK if successful; otherwise, E_ILLEGAL_METHOD_CALL.

Remarks

This method implements IAsyncInfo::get_Status.

AsyncBase::GetOnComplete

Copies the address of the current completion event handler to the specified variable.

STDMETHOD(
   GetOnComplete
)(TComplete** completeHandler);

Parameters

completeHandler
The location where the address of the current completion event handler is stored.

Return Value

S_OK if successful; otherwise, E_ILLEGAL_METHOD_CALL.

AsyncBase::GetOnProgress

Copies the address of the current progress event handler to the specified variable.

STDMETHOD(
   GetOnProgress
)(TProgress** progressHandler);

Parameters

progressHandler
The location where the address of the current progress event handler is stored.

Return Value

S_OK if successful; otherwise, E_ILLEGAL_METHOD_CALL.

AsyncBase::OnCancel

When overridden in a derived class, cancels an asynchronous operation.

virtual void OnCancel(
   void
) = 0;

AsyncBase::OnClose

When overridden in a derived class, closes an asynchronous operation.

virtual void OnClose(
   void
) = 0;

AsyncBase::OnStart

When overridden in a derived class, starts an asynchronous operation.

virtual HRESULT OnStart(
   void
) = 0;

AsyncBase::put_Id

Sets the handle of the asynchronous operation.

STDMETHOD(
   put_Id
)(const unsigned int id);

Parameters

id
A nonzero handle.

Return Value

S_OK if successful; otherwise, E_INVALIDARG or E_ILLEGAL_METHOD_CALL.

AsyncBase::PutOnComplete

Sets the address of the completion event handler to the specified value.

STDMETHOD(
   PutOnComplete
)(TComplete* completeHandler);

Parameters

completeHandler
The address to which the completion event handler is set.

Return Value

S_OK if successful; otherwise, E_ILLEGAL_METHOD_CALL.

AsyncBase::PutOnProgress

Sets the address of the progress event handler to the specified value.

STDMETHOD(
   PutOnProgress
)(TProgress* progressHandler);

Parameters

progressHandler
The address to which the progress event handler is set.

Return Value

S_OK if successful; otherwise, E_ILLEGAL_METHOD_CALL.

AsyncBase::Start

Starts the asynchronous operation.

STDMETHOD(
   Start
)(void);

Return Value

S_OK if the operation starts or is already started; otherwise, E_ILLEGAL_STATE_CHANGE.

Remarks

Start() is a protected method that is not externally visible because async operations "hot start" before returning to the caller.

AsyncBase::TryTransitionToCompleted

Indicates whether the current asynchronous operation has completed.

bool TryTransitionToCompleted(
   void
);

Return Value

true if the asynchronous operation has completed; otherwise, false.

AsyncBase::TryTransitionToError

Indicates whether the specified error code can modify the internal error state.

bool TryTransitionToError(
   const HRESULT error
);

Parameters

error
An error HRESULT.

Return Value

true if the internal error state was changed; otherwise, false.

Remarks

This operation modifies the error state only if the error state is already set to S_OK. This operation has no effect if the error state is already error, cancelled, completed, or closed.