Condividi tramite


IAsyncOperation<TResult> Interfaccia

Definizione

Rappresenta un'operazione asincrona, che restituisce un risultato al completamento. Questo è il tipo restituito per molti metodi asincroni di Windows Runtime (WinRT) che hanno risultati ma non segnalano lo stato di avanzamento.

public interface class IAsyncOperation : IAsyncInfo
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.FoundationContract, 65536)]
/// [Windows.Foundation.Metadata.Guid(2680336571, 58438, 17634, 170, 97, 156, 171, 143, 99, 106, 242)]
template <typename TResult>
struct IAsyncOperation : IAsyncInfo
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.FoundationContract), 65536)]
[Windows.Foundation.Metadata.Guid(2680336571, 58438, 17634, 170, 97, 156, 171, 143, 99, 106, 242)]
public interface IAsyncOperation<TResult> : IAsyncInfo
Public Interface IAsyncOperation(Of TResult)
Implements IAsyncInfo

Parametri di tipo

TResult
Derivato
Attributi
Implementazioni

Requisiti Windows

Famiglia di dispositivi
Windows 10 (è stato introdotto in 10.0.10240.0)
API contract
Windows.Foundation.FoundationContract (è stato introdotto in v1.0)

Commenti

IAsyncOperation<TResult> è il tipo restituito per molti metodi asincroni WinRT che hanno un risultato al completamento, ma non segnalano lo stato di avanzamento. Ciò costituisce più di 650 API WinRT diverse. Le API che segnalano lo stato di avanzamento e hanno un risultato usano un'altra interfaccia, IAsyncOperationWithProgress<TResult,TProgress>.

Quando usi metodi che restituiscono IAsyncOperation<TResult> (con un vincolo specifico TResult) nel codice dell'app, in genere non accedi direttamente al valore restituito IAsyncOperation. Questo perché si usa quasi sempre la sintassi awaitable specifica del linguaggio. In questo caso, il valore restituito apparente del metodo è il tipo fornito come parametro TResult. Per altre informazioni, vedere Programmazione asincronao una delle guide specifiche del linguaggio alla programmazione asincrona WinRT (Chiamare API asincrone in C# o Visual Basic, C++, JavaScript).

Non è comune usare IAsyncOperation<TResult> direttamente anche se non si usa una sintassi awaitable specifica del linguaggio. Ogni linguaggio dispone di punti di estensione che sono in genere più facili da usare rispetto all'interfaccia WinRT. JavaScript include WinJS.Promisee la sintassi di then/done. .NET dispone del metodo di estensione AsTask e, dopo che il IAsyncOperation<TResult> viene convertito in un'attività <TResult>, è più semplice ottenere il risultato, annullare, ricevere una notifica al completamento e così via. Per C++/CX, è possibile eseguire il wrapping delle chiamate usando runtime di concorrenza (e usare create_task). In altre parole, IAsyncOperation<TResult> può essere considerata un'infrastruttura a livello di runtime, che ogni linguaggio usa come framework per supportare modelli di programmazione asincroni o sintassi awaitable in modo autonomo.

Anziché usare IAsyncOperation<TResult>, alcuni metodi asincroni WinRT usano tipi di operazione personalizzati. Ad esempio, DataReaderLoadOperation è un tipo WinRT che implementa IAsyncOperation usando uint come tipo di risultato. Il tipo DataReaderLoadOperation viene quindi usato come tipo di operazione/risultato personalizzato per il metodo DataReader.LoadAsync.

Se si dispone di un metodo che restituisce un Task<T> .NET ed è necessario un IAsyncOperation<TResult> per passare a un'API WinRT, è possibile usare il metodo di estensione AsAsyncOperation.

Funzioni di estensione C++/WinRT

Nota

Le funzioni di estensione esistono nei tipi di proiezione C++/WinRT per determinate API WinRT. Ad esempio, winrt::Windows::Foundation::IAsyncAction è il tipo di proiezione C++/WinRT per IAsyncAction. Le funzioni di estensione non fanno parte della superficie ABI (Application Binary Interface) dei tipi WinRT effettivi, quindi non sono elencati come membri delle API WinRT. Ma puoi chiamarli dall'interno di qualsiasi progetto C++/WinRT. Vedere funzioni C++/WinRT che estendono le API di Windows Runtime.

TResult get() const;

Attende in modo sincrono il completamento dell'operazione e restituisce il valore completato. Genera un'eccezione corrispondente se l'operazione viene annullata o entra in uno stato di errore. Non è necessario chiamarlo da un apartment a thread singolo. Per altre info ed esempi di codice che illustrano come chiamare get, vedere Scrivere una coroutine.

AsyncStatus wait_for(TimeSpan const& timeout) const;

Attende in modo sincrono il completamento dell'operazione o il timeout specificato. Restituisce lo stato del IAsyncOperationo AsyncStatus::Started se è trascorso il timeout. Se l'azione non si è timeout, chiamare GetResults per ottenere i risultati dell'operazione. Per altre info ed esempi di codice che illustrano come chiamare wait_for, vedere timeout asincroni semplificati.

Ereditarietà dell'interfaccia

IAsyncOperation<TResult> eredita IAsyncInfo. I tipi che implementano IAsyncOperation<TResult> implementano anche i membri dell'interfaccia di IAsyncInfo:

Note per gli implementatori

Come per chiamare i metodi esistenti, esistono modi specifici del linguaggio per definire metodi asincroni che non usano direttamente IAsyncOperation<TResult>. Se si scrive codice con .NET, il metodo può restituire un Task<TResult>. Per C++/CX, è possibile usare il runtime di concorrenza . Tuttavia, se stai definendo un componente , puoi usare Task/task internamente, ma devi restituire una delle interfacce WinRT per i metodi pubblici. I tipi di supporto asincrono specifici del linguaggio (e molti altri tipi specifici del linguaggio che potresti usare convenzionalmente nel codice) non possono essere usati per la superficie di attacco pubblica di un componente WinRT.

Proprietà

Completed

Ottiene o imposta il delegato chiamato al termine dell'operazione.

ErrorCode

Ottiene una stringa che descrive una condizione di errore dell'operazione asincrona.

(Ereditato da IAsyncInfo)
Id

Ottiene l'handle dell'operazione asincrona.

(Ereditato da IAsyncInfo)
Status

Ottiene un valore che indica lo stato dell'operazione asincrona.

(Ereditato da IAsyncInfo)

Metodi

Cancel()

Annulla l'operazione asincrona.

(Ereditato da IAsyncInfo)
Close()

Chiude l'operazione asincrona.

(Ereditato da IAsyncInfo)
GetResults()

Restituisce i risultati dell'operazione.

Si applica a

Vedi anche