Partilhar via


IAsyncOperation<TResult> Interface

Definição

Representa uma operação assíncrona, que retorna um resultado após a conclusão. Esse é o tipo de retorno para muitos métodos assíncronos do WinRT (Windows Runtime) que têm resultados, mas não relatam o progresso.

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

Parâmetros de tipo

TResult
Derivado
Atributos
Implementações

Requisitos do Windows

Família de dispositivos
Windows 10 (introduzida na 10.0.10240.0)
API contract
Windows.Foundation.FoundationContract (introduzida na v1.0)

Comentários

IAsyncOperation<TResult> é o tipo de retorno para muitos métodos assíncronos do WinRT que têm um resultado após a conclusão, mas não relatam o progresso. Isso constitui mais de 650 APIs diferentes do WinRT. AS APIs que relatam o progresso e têm um resultado usam outra interface, IAsyncOperationWithProgress<TResult,TProgress>.

Ao usar métodos que retornam IAsyncOperation<TResult> (com uma restrição TResult específica) no código do aplicativo, você geralmente não acessa o valor retornado IAsyncOperation diretamente. Isso ocorre porque você quase sempre usa a sintaxe aguardada específica do idioma. Nesse caso, o valor de retorno aparente do método é o tipo fornecido como o parâmetro TResult. Para obter mais informações, consulte de programação assíncrona ou um dos guias específicos da linguagem para programação assíncrona do WinRT (Chamar APIs assíncronas em C# ou visual Basic, C++ , JavaScript).

Não é comum usar IAsyncOperation<TResult> diretamente, mesmo que você não use uma sintaxe aguardável específica do idioma. Cada um dos idiomas tem pontos de extensão que geralmente são mais fáceis de usar do que a interface WinRT. O JavaScript tem WinJS.Promise e a sintaxe then/done. O .NET tem o método de extensão AsTask e, depois que o IAsyncOperation<TResult> é convertido em um Task<TResult>, é mais fácil obter o resultado, cancelar, receber notificação sobre a conclusão e assim por diante. Para C++/CX, você pode encapsular as chamadas usando o de runtime de simultaneidade (e usar create_task). Em outras palavras, IAsyncOperation<TResult> pode ser considerada infraestrutura em nível de runtime, que cada um dos idiomas usa como uma estrutura para dar suporte a modelos de programação assíncronos ou sintaxe aguardados à sua maneira.

Em vez de usar IAsyncOperation<TResult>, alguns métodos assíncronos do WinRT usam tipos de operação personalizados. Por exemplo, DataReaderLoadOperation é um tipo WinRT que implementa IAsyncOperation usando uint como o tipo de resultado. O tipo DataReaderLoadOperation é usado como o tipo de operação/resultado personalizado para o método DataReader.LoadAsync.

Se você tiver um método que retorne um .NET e precise de um para passar para uma API do WinRT, poderá usar o método de extensão AsAsyncOperation.

Funções de extensão C++/WinRT

Nota

Existem funções de extensão nos tipos de projeção C++/WinRT para determinadas APIs do WinRT. Por exemplo, winrt::Windows::Foundation::IAsyncAction é o tipo de projeção C++/WinRT para IAsyncAction. As funções de extensão não fazem parte da superfície da ABI (interface binária do aplicativo) dos tipos winRT reais, portanto, elas não são listadas como membros das APIs do WinRT. Mas você pode chamá-los de dentro de qualquer projeto C++/WinRT. Consulte funções C++/WinRT que estendem as APIs do Windows Runtime.

TResult get() const;

Aguarda de forma síncrona a conclusão da operação e retorna o valor concluído. Gera uma exceção correspondente se a operação é cancelada ou insere um estado de erro. Você não deve chamá-lo de um apartamento de thread único. Para obter mais informações e exemplos de código mostrando como chamar get, consulte Gravar umde coroutina.

AsyncStatus wait_for(TimeSpan const& timeout) const;

Aguarda de forma síncrona para que a operação seja concluída ou pelo tempo limite especificado. Retorna o estado do IAsyncOperationou AsyncStatus::Started se o tempo limite tiver decorrido. Se a ação não atingiu o tempo limite, chame GetResults para obter os resultados da operação. Para obter mais informações e exemplos de código mostrando como chamar wait_for, consulte tempos limite assíncronos facilitou.

Herança da interface

IAsyncOperation<TResult> herda IAsyncInfo . Os tipos que implementam também implementam os membros da interface doIAsyncInfo :

Anotações aos implementadores

Assim como ao chamar os métodos existentes, há maneiras específicas de definir métodos assíncronos que não usam IAsyncOperation<TResult> diretamente. Se estiver escrevendo código usando o .NET, seu método poderá retornar uma tarefa <TResult>. Para C++/CX, você pode usar ode runtime de simultaneidade do . No entanto, se você estiver definindo um componente , poderá usar Task/task internamente, mas deverá retornar uma das interfaces WinRT para seus métodos públicos. Os tipos de suporte assíncronos específicos do idioma (e muitos outros tipos específicos de linguagem que você pode usar convencionalmente no código) não podem ser usados para a área de superfície pública de um componente WinRT.

Propriedades

Completed

Obtém ou define o delegado que é chamado quando a operação é concluída.

ErrorCode

Obtém uma cadeia de caracteres que descreve uma condição de erro da operação assíncrona.

(Herdado de IAsyncInfo)
Id

Obtém o identificador da operação assíncrona.

(Herdado de IAsyncInfo)
Status

Obtém um valor que indica o status da operação assíncrona.

(Herdado de IAsyncInfo)

Métodos

Cancel()

Cancela a operação assíncrona.

(Herdado de IAsyncInfo)
Close()

Fecha a operação assíncrona.

(Herdado de IAsyncInfo)
GetResults()

Retorna os resultados da operação.

Aplica-se a

Confira também