IAsyncAction 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'azione asincrona. Questo è il tipo restituito per molti metodi asincroni di Windows Runtime (WinRT) che non hanno un oggetto risultato e non segnalano lo stato di avanzamento in corso.
public interface class IAsyncAction : IAsyncInfo
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.FoundationContract, 65536)]
/// [Windows.Foundation.Metadata.Guid(1516535814, 33850, 19881, 134, 91, 157, 38, 229, 223, 173, 123)]
struct IAsyncAction : IAsyncInfo
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.FoundationContract), 65536)]
[Windows.Foundation.Metadata.Guid(1516535814, 33850, 19881, 134, 91, 157, 38, 229, 223, 173, 123)]
public interface IAsyncAction : IAsyncInfo
Public Interface IAsyncAction
Implements IAsyncInfo
- 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
IAsyncAction
è il tipo restituito per tutti i metodi asincroni WinRT che non comunicano un oggetto risultato o lo stato di avanzamento in corso. Ciò costituisce più di 300 API WinRT diverse. Le API che segnalano lo stato di avanzamento ma non hanno un risultato usano un'altra interfaccia, IAsyncActionWithProgress.
Quando usi metodi che restituiscono IAsyncAction
nel codice dell'app, in genere non accedi direttamente al valore restituito IAsyncAction
. Questo perché si usa quasi sempre la sintassi awaitable specifica del linguaggio. In questo caso, il valore restituito apparente del metodo è void. 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).
IAsyncAction
è anche un tipo di input per alcune API di utilità di scenario avanzato, ad esempio CoreDispatcher.RunAsync e ThreadPool.RunAsync.
Non è comune usare IAsyncAction
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 include il metodo di estensione AsTask e una volta che il IAsyncAction
viene convertito in un Task, è più facile 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, IAsyncAction
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.
Invece di usare IAsyncAction
, alcuni metodi asincroni WinRT usano tipi di azione personalizzati (che potrebbero avere "Operation" anziché "Action" nel nome). Ad esempio, SignOutUserOperation è un tipo WinRT che implementa IAsyncAction
. Il tipo di SignOutUserOperation
Se si dispone di un metodo che restituisce un Task
.NET ed è necessario un IAsyncAction
per passare a un'API WinRT, è possibile usare il metodo di estensione AsAsyncAction.
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.
void get() const;
Attende in modo sincrono il completamento dell'azione. Genera un'eccezione corrispondente se l'azione 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'azione o il timeout specificato. Restituisce lo stato del IAsyncAction
o AsyncStatus::Started se è trascorso il timeout. Se l'azione non si è timeout, chiamare GetResults per ottenere i risultati dell'azione. Per altre info ed esempi di codice che illustrano come chiamare wait_for
, vedere timeout asincroni semplificati.
Ereditarietà dell'interfaccia
IAsyncAction
eredita IAsyncInfo. I tipi che implementano IAsyncAction
implementano anche i membri dell'interfaccia di IAsyncInfo:
- metodo Cancel
- metodo Close
- proprietà ErrorCode
- proprietà id
- 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 IAsync Info. Se si scrive codice con .NET, il metodo può restituire un Task. 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'azione. |
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'azione. |