IAsyncOperation<TResult> Interfaccia
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Rappresenta un'operazione asincrona, che restituisce un risultato al completamento. Questo è il tipo restituito per molti Windows Runtime metodi asincroni 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 Windows Runtime metodi asincroni che hanno un risultato al completamento, ma non segnalano lo stato di avanzamento. Ciò costituisce più di 650 API Windows Runtime 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 asincrona o una delle guide specifiche del linguaggio per Windows Runtime programmazione asincrona (Chiamare API asincrone in C# o Visual Basic, C++, JavaScript).
Non è comune usare direttamente IAsyncOperation<TResult> anche se non si usa una sintassi awaitable specifica del linguaggio. Ogni linguaggio include punti di estensione che sono in genere più facili da usare rispetto all'interfaccia Windows Runtime. JavaScript include WinJS.Promise e la sintassi then/done . .NET dispone del metodo di estensione AsTask e, dopo che IAsyncOperation<TResult> viene convertito in un oggetto Task<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 il runtime di concorrenza (e usare create_task). In altre parole, IAsyncOperation<TResult> può essere considerato un'infrastruttura a livello di runtime, che ogni linguaggio usa come framework per supportare la sintassi awaitable o i modelli di programmazione asincroni in modo autonomo.
Invece di usare IAsyncOperation<TResult>, alcuni metodi asincroni Windows Runtime usano tipi di operazione personalizzati. Ad esempio, DataReaderLoadOperation è un tipo Windows Runtime 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 .
Funzioni di estensione C++/WinRT
Nota
Le funzioni di estensione esistono nei tipi di proiezione C++/WinRT per determinate API di Windows Runtime. 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 di Windows Runtime effettivi, quindi non sono elencati come membri delle API Windows Runtime. Ma puoi chiamarli da qualsiasi progetto C++/WinRT. Vedi Funzioni C++/WinRT che estendono Windows Runtime API.
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, vedi 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 di IAsyncOperation o AsyncStatus::Started se il timeout è trascorso. 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, vedi Timeout asincroni semplificati.
Ereditarietà dell'interfaccia
IAsyncOperation<TResult> eredita IAsyncInfo. I tipi che implementano IAsyncOperation<TResult> implementano anche i membri dell'interfaccia di IAsyncInfo:
- Cancel , metodo
- Metodo Close
- ErrorCode - proprietà
- Id - proprietà
- Proprietà Status
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 oggetto Task<TResult>. Per C++/CX, è possibile usare il runtime di concorrenza. Tuttavia, se si definisce un componente, è possibile usarel'attivitàAttività/ internamente, ma è necessario restituire una delle interfacce Windows Runtime per i metodi pubblici. I tipi di supporto asincrono specifici del linguaggio (e molti altri tipi specifici del linguaggio che potresti usare in modo convenzionale nel codice) non possono essere usati per l'area di attacco pubblica di un componente Windows Runtime.
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
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per